我有一个9字节值的成员结构。该结构的sizeof()返回为10.我假设额外的字节是由于填充。 是否允许填充字节用于任何事情,还是编译器“保留”它?也就是说,就程序而言,内存是否永远丢失?填充结构内存使用情况
问题的原因是我的空间非常短缺,所以我使用位操作在一个字节中使用了其中一个成员来存储多个值。然而,如果填充的字节从未被另外使用,我可以通过在不增加结构的整体大小的情况下具有额外的字节值来代替填充的字节来降低访问位操纵的字节中的至少一个值的复杂度。 但如果可能,我宁愿回收填充的空间用于其他变量。助教。
typedef struct node {
struct node * sibling, *child; // 2 * 2 bytes
char * name; // 2 bytes
handle callback; // 2 bytes
uint16_t properties; // 1 byte
} node; // total by members = 9 bytes
totalSizeOfnode = sizeof(node); //totalSizeOfNode = 10
您可以在结构的末尾添加一个“char”字段,并在其中存储任何您想要的内容。它不会改变'sizeof'或内存需求。但是你的田地长度真的很奇怪。 'sizeof uint_16t should == 2',并且,根据平台的不同,'sizeof void * should == 4 or 8' –
为什么你认为uint16_t的大小是1字节? – urzeit
它在我目前正在使用的uC上执行:) – Toby