我具有以下结构:包结构/避免填充
struct SkipListNode{
void *data; // 8 bytes
uint8_t size; // 1 byte
// 7 bytes padding here...
void *next[1]; // dynamic array, 8 bytes each "cell"
};
我使用malloc()
和我比sizeof(SkipListNode)
分配更多的空间,所以我延伸next[]
阵列。
我想避免7 bytes
浪费。我可以完全删除大小字段,但是我应该在数组末尾保留单个NULL
(8个字节)。但是这不会减小尺寸。
我应该用__ attribute__((__ packed__))
还是有一些不同的方法可以做到这一点?
这也必须在C和C++下编译。
编译器是gcc。
'attribute((packed))'有什么问题?内存是否只关心,你是否创建了这种类型的很多实例(对象)? –
一般,没问题。内存是关注点,因为我制作了成千上万个这样的(它是跳过列表节点) – Nick
你认为'#pragma pack(1)' –