sizeof求结构体内存大小

来源:互联网 发布:多益网络 上市 编辑:程序博客网 时间:2024/05/03 02:04

首先不考虑设定字节对齐的大小:

首先要找到结构体中或类中最大的变量的大小,比如

struct A

{

char a;

int b;

double c;

};

在计算这个结构体的所占字节大小的时候,首先要获得结构体中最大的所占字节的大小,即double c的大小,即8;在计算最后的大小的时候,要补齐成最大的变量的整数倍,即8的整数倍;

然后就是开始一个一个计算大小了

a   0

b   4~7//因为int变量的大小是4,所以b的内存大小要从该变量所占内存大小的整数倍开始,即4

c  8~15//因为double变量的大小是8,所以从8开始

计算结果是0~15,长度是16,能够被8整除,所以长度是16;

typedef struct AA{char a;int b;double c;}strAA;int main(){/*cout<<sizeof(uint8_t)<<endl;cout<<sizeof(uint16_t)<<endl;cout<<sizeof(uint32_t)<<endl;cout<<sizeof(uint64_t)<<endl;cout<<sizeof(char*)<<endl;*/cout<<sizeof(strAA)<<endl;getchar();return 1;}
输出结果是:

但是,如果我在结构体最后再加一个char d;大小最后是多少呢?是24

如果是设定字节对齐的大小,即#pragma pack()//括号中可以自己设定对齐的长度

如设定#pragma pack(2)

第一个结构体的大小是14,而第二个结构体的大小为16,至于怎么算的,和上述讲述道理一样;

/********************************************************************************分割线**********************************************************************/

下面贴上uint8_t,uint16_t, uint32_t, uint64_t的字节大小


0 0
原创粉丝点击