C/C++结构体大小问题
自定义的结构体大小与其内所定义的成员变量以及所采用的对齐方式有关。在进行网络编程时,若用结构体进行接收或者发送,则接发两端所定义的结构体大小必须一致,若跨系统编程,还要注意同一数据类型可能在不同系统下的大小也不同,如下表所示:
所以跨系统编程时,应尽量避免使用long类型,或者对其进行特殊处理。
当未指定对齐方式时,默认会按照结构体内长度最大的成员变量进行对齐,如下图示例:(操作系统为32位)
可以通过指定对齐方式的方法来改变结构体的对齐方式,在C/C++中通过预编译指令#pragma pack(n)手动设置,其中n只能填1 2 4 8 16,填1则为按照1字节进行对齐,如下图所示:
在CAPL中,通过在结构体定义前添加一句align(1)即可,如:
align(1) struct name {…};