当前位置:首页 > 内存 > 正文

结构体变量占内存的大小由什么决定

  • 内存
  • 2024-06-04 12:21:16
  • 3497

一、结构体内存分配事实上,由于存储变量时需要地址扩展的要求,编译器在编译程序时会遵循两个原则:1、成员在结构体变量中的偏移量必须是成员大小的整数倍(0为被认为是任意整数倍)2.结构体的大小必须是所有成员大小的整数倍。


二、结构体数据类型的内存大小评估结构占用的空间;一般分为三个步骤:
1.首先确定实际的校准单位,它是由以下三个因素决定的。CPU操作
WINvsqt默认8字节对齐
Linux32位默认4字节对齐,64位默认8字节对齐
2>结构体最大成员(基本数据类型变量)
3>预编译指令#pragmapack(n)自定义只能填写n--124816
取以上三个中最小的一个为实际对齐单位(这里“实际的“调整单位”是一个松散选择的概念,以便于识别)
2结构;所有其他成员相对于结构体的地址(即其第一个成员的地址)是实际对齐单元或其自身大小(以较小者为准)的整数倍
3.整个结构体的大小必须是实际对齐单元的整数倍。
所以结构体实际占用的内存大小大于等于结构体中所有成员数据大小之和。


三、关于结构体变量sizeof(structA)的大小问题?大小与对齐方式有关,一般为4字节对齐。
但是,您也可以更改对齐方式。
使用#pragmapack(1)。
此方法每次对齐字节一个字节,但如果没有特殊需要,会影响效率。最好保持不变。