结构体占用存储大小计算

电脑杂谈  发布时间:2019-10-09 00:02:58  来源:网络整理

大小结构_大小结构种群模型_计算结构体大小

看上去编译器像是4字节对齐,double占两个单位

4+8

4+4+4

4+8

4+8+4

xuyo_wx

xuuyaoo另外,你拿人家的例子运行结果不同很正常。第一,操作系统不同,编译环境不同,都或许促使各类型占存储字节大小不同。第二,编译环境不同,有也许结构体内存对齐系数不同。你的环境有也许是4字节对齐。每个特定系统上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。

接近 4 年之前

你的想法在gcc 4.9.2 x86_64 上是对的。

|

计算结构体大小_大小结构种群模型_大小结构

love1937

我认为你需要先用sizeof()确定下各种类型的字节宽度,然后再用字节对齐方法分析。如果还不能分析清,我们再讨论

|

havedream_one

你先定义一个结构体指针,并给它附上初值,记录下此刻指针指向的地址数值,再让该指针加一,然后记录下这时指针存储的地址,两者相加就可以得到结构体占用的存储大小了

|

lovingning

和地址最大到对其,不过也要看能否是4到倍数

|

paopaoTT

计算结构体大小_大小结构_大小结构种群模型

另外,你拿人家的例子运行结果不同很正常。 第一,操作系统不同,编译环境不同,都或许促使各类型占存储字节大小不同。 第二,编译环境不同,有也许结构体内存对齐系数不同。你的环境有也许是4字节对齐。 每个特定系统上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数计算结构体大小,其中的n就是你要指定的“对齐系数”。

|

John_ToString

看着好像是高手级别的人物,语言C和平台Linux是不是。觉得会C和Linux的都是大神,可是我一点都不会,该如何办?

|

singlesoar

内存对其问题,结构体中的数据对其一般以最大的数据种类所占存储对其,其次就是内存需要是2或4的整数倍。

|

xiaoqian1641

示例程序是根据4字节对齐计算结构体大小,变量a,aa,b,hh的在栈上的布局需要如下(其中,一个字符表示一个字节):

计算结构体大小_大小结构种群模型_大小结构

图片说明

另外,楼主可以使用宏**#pragma pack(n) **指定编译时的对齐参数,多尝试几次,比较下就回来结论了。

|

UrHalo

来一次性说明结构体内存大小问题吧,分三步轻松极速11选5,妈妈现在再也不用担心我分不清结构体长度了。

第一步:选出结构体中占存储最大的成员种类,【double、float、long、int等等等等基本的长度是多少自行补习】。

第二步:以最大成员类型的对齐长度一排为基准,将结构体成员依次顺序,只要有一个字节不够就跑到下一排去。

第三步:统计有多少排,乘以最长成员种类的宽度,即得到结构体长度。

举例【假设32位系统中】

typedef struct datstruct{

计算结构体大小_大小结构_大小结构种群模型

int a;

char b;

int c;

double d;

char e;

char f;

char g;

}_datstruct;

该结构体中最长成员是double d,长度为8字节对齐。以8字节为基准。

画一个每排8字节的格子,按照a~g的次序依次填进去,a占4字节,b占1字节,c占4字节,因为第一排ab已占据了5字节,所以把c放在第二排开始【即b上面空出3个无用字节】。在前面d占据8字节,只好放在第三排开始排,最后efg在第四排。排序的方法就是严格依照结构体成员原本的次序,空间不够就放在下一排。

上面一共排了4排,每排按照8字节对齐,于是总尺寸32字节。

|


本文来自电脑杂谈,转载请注明本文网址:
http://xinshanjie.com/a/jisuanjixue/article-125633-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...