结构体数组字节数大小

    xiaoxiao2021-03-25  70

    代码1: 1 struct BOOK 2 { 3 char name[5]; 4 float price; 5 }book[2];

            分别计算sizeof(struce BOOK)和sizeof(book)的字节数大小,结果分别为12,和24。原因在于结构体有字节对齐规则。

            其内存分配情况如下:

           

    1byte1byte1byte1bytename  [0]   name  [1]    name [2]    name [3]        name[4]     floatfloatfloatfloat         第一步:先找结构体成员中占字节数最大的元素,求出其占的字节数(注意,若成员中也有结构体,把结构体按照一个成员来看),例如,例子中最大元素的字节数为4,则以4来分配其它成员。         第二步:按照成员的先后顺序排列,如表格所示,数组超过了4个字节,换行继续排列。剩下3个字节不够float型数据使用,则换行,空出3个字节空间。依此类推。

    代码2:

    struct BOOK { char name[NAME]; float price; char tmp; }book[2];

            若此时多出来一个char成员,那么,字节数变为16,其内存分配方式如下所示,假若改变char到第二排,那么总字节数就变为12,所以要合理安排顺序。

    1byte1byte1byte1bytename [0]name [1]name [2]name [3]name [4]   floatfloatfloatfloatchar   最后注意:         一般设置的对齐方式为1,2,4字节对齐方式,VC一般默认为4字节(最大为8字节)。结构的首地址必须是结构内最宽类型的整数倍地址;另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gcc编译器下最高为4字节对齐),否则在前一类型后补0;这里特别提到的是数组一定要注意,而且在一些编程的技巧中,我们可以使用数组强制字节达到对齐的目的。这在网络编程中是很常见的。         故struct sockaddr_in6结构体的大小为28个字节
    转载请注明原文地址: https://ju.6miu.com/read-33884.html

    最新回复(0)