之前说过一个关于结构体在内存中所占字节数的问题,我们知道结构体长度的计算并不是所有成员长度的相加,而是因为编译器优化会对其进行对齐,这样会优化访问速度等。
那么还有一种情况,因为特殊原因,需要结构体的长度按字节对齐,结构体的长度就是所有成员长度的和。尤其是嵌入式编程以及网络编程中好多地方都有这样的要求,这时候怎么做呢?
这个时候如果是在linux下,就需要用到GNU C 的__attribute__ 机制。
比如:
struct A {
int i;
char c;
} __attribute__((packed));
那么这个结构体的长度就是sizeof(int)+sizeof(c)的大小。
类似的在windows下也有相应的机制来实现。更详细的介绍可参考网上的文章。