在C(使用gcc)我可以聲明的可變長度結構如下面零長度數組的結構體:ALLOC使用新
typedef struct ProtocolFrame
{
uint8_t op;
uint32_t address;
uint16_t size;
uint8_t payload[0];
} ProtocolFrame;
然後我可以ALLOC不同幀:
ProtocolFrame *frA;
ProtocolFrame *frB;
frA = malloc(sizeof(ProtocolFrame) + 50);
frB = malloc(sizeof(ProtocolFrame));
在這個例子frA有一個大於50字節的有效載荷字段,而frB沒有有效載荷
我可以使用new運算符在C++中做同樣的事嗎?
這並不完全相同,因爲通過使用malloc,他有一個動態大小的擴展,而這是靜態大小。 – Puppy 2010-12-23 10:26:26
你不一定需要`std :: malloc`。你可以寫`新字符[sizeof(ProtocolFrame)+ 50];`但我不知道這是否保證對齊。 – 2010-12-23 10:32:07
@Chris:`:: operator new(sizeof(ProtocolFrame)+50)`保證對齊。 – 2010-12-23 10:42:34