在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