当前位置:网站首页>结构体大小计算--结构体内存对齐
结构体大小计算--结构体内存对齐
2022-08-02 06:20:00 【风吹电风扇】
1.对齐规则
结构体的内存大小是根据其内存对齐的结果计算得来的,对齐遵循以下规则:
1. 第一个成员在与结构体变量偏移量为0的地址处。
2. 其他成员变量要对齐到对齐数的整数倍的地址处。
(对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。)
3 .结构体的总大小位最大对齐数的整数倍。
2.计算演示
代码
struct A
{
char ch;
short num1;
int num2;
};
struct B
{
char ch;
int num2;
short num1;
};
int main()
{
printf("%u %u", sizeof(struct A), sizeof(struct B));
}
结果
可是结构体A和结构体B的内容是完全一样的,为什么计算出的大小不同?
过程分析
注:VS中的默认对齐数为8
结构体A
1. 将char类型数据排在偏移量为0的位置,char的大小为1,对齐数取8(VS中的默认对齐数)和1的较小值为12.将short类型放到2的整数倍位置(2和8的较小值)
3.再将int类型放到4(4和 8的最小值)的整数倍位置。

同理结构体B占12字节,如下图所示:

3.修改默认对齐数
#pragma pack()
例子
#pragma pack(8)//设置默认对齐数为8
#pragma pack(1)//设置默认对齐数为1
#pragma pack()取消设置的默认对齐数,还原为默认
用处:让程序员能够更好的设计结构体就以上面同样内容的结构体A和B为例,优秀的结构体设计可以节省不少内存。
注:修改完默认对齐数后别忘了改回去!
边栏推荐
- Servlet
- Swagger的简单介绍,集成,以及如何在生产环境中关闭swagger,在测试和开发环境中自动打开
- 张驰咨询:企业实施精益管理的最大障碍,只把精益作为一种工具和方法
- Understand C operators in one article
- typescript 'props' is declared but its value is never read solution
- MySQL Advanced - MVCC (ultra-detailed finishing)
- 关于ue4.27像素流送打包后的本地服务器问题
- 张驰课堂:六西格玛培训工具——箱线图
- 专家见解|经济低迷期把握创新机会的 3 大方法
- 武汉高性能计算大会2022举办,高性能计算生态发展再添新动力
猜你喜欢

Nodejs installation tutorial

Nodejs installation and global configuration (super detailed)

MySQL Advanced Statements (1)

Revitalize rural circular economy and digital chain to link agricultural "ecological chain"

正则表达式的理解学习

The second day HCIP

实例028:递归求等差数列

推出 Space On-Premises (本地部署版) Beta 版!

yml字符串读取时转成数字了怎么解决

APP专项测试:流量测试
随机推荐
Specified URL is not reachable,caused by :‘Read timed out
实例028:递归求等差数列
Vscode连接远程服务器出现‘Acquiring lock on/home/~’问题
Dataset:机器学习中常用数据集下载链接集合之详细攻略
【npm install 报错问题合集】- npm ERR! code ENOTEMPTY npm ERR! syscall rmdir
2022年8月计划,着重ue4视频教程
[npm install error report collection] - npm ERR! code ENOTEMPTY npm ERR! syscall rmdir
optional
PHP Warning: putenv() has been disabled for security reasons in phar
The nacos source code can not find the istio package
request.getSession(), the story
C# FileInfo class
HCIP 第四天
[Dataset][VOC] Eyewear dataset 6000 in VOC format
Servlet
Understand C operators in one article
Servlet
能与观众实时互动的Claper
张驰课堂:六西格玛测量系统的误差分析与判定
nacos源码启动找不到istio包