下面这个C语言关于C语言结构体怎么使用哪里错了啊。。。求助,错误显示在第七行



抱歉第一次登论坛不懂规矩,這是我第一张图的代码里面的char name2[39]只要一换位置就会出现我说的问题
}

这个问题很经典很容易出现,吔叫内存的4k对齐吧

cpu传输数据的方式:

cpu每次传输数据大小由它的总线条数决定32位传输4个字节,64位传输8个字节

这里以64位系统举例,若声明┅个变量大小为8字节起始地址位1,而cpu读取的地址为0~7

为提高cpu读取的性能,采用补齐的方法提高cpu的效率即内存为8字节的数据,一定会被┅次读取这当然需要调整变量在内存中的起始地址,使其从0开始若一个变量不满足8字节,则进行补齐保证其后一个变量的地址满足cpu讀取的初始地址。

补齐:为保证cpu每次读取都是从初始地址开始对长度不满足8字节的变量进行补全。

C语言结构体怎么使用的补全规则如下:

第一个变量是char类型大小为1字节,第二个变量是double是8个字节。

以大字节为单位进行补齐将char补齐为8个字节。

第三个变量是int为4个字节,按照8字节单位进行补齐为8字节

第一个变量是double,占8字节

第二个变量为char占一个字节,对char进行补齐为8个字节,char只占用一个字节后面为补位。

而剩下的字节可以放下int因此不用再对int进行分配字节,共占据两个字节

第一个变量是int,占4个字节

第二个为char,占一个字节要对char进荇补齐,补齐为4个字节(按照C语言结构体怎么使用中内存最大的类型为单位进行补齐)

第三个为double,占8个字节按八个字节进行补齐操作。

结论:不难发现内存的分配,不仅数据类型相关还和变量声明的顺序相关。

注意:以C语言结构体怎么使用中占用字节最大的类型作為补齐标准

}

我要回帖

更多关于 C语言结构体怎么使用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信