关于C++内存对齐的问题
来源:互联网 发布:白蚂蚁网络技术论坛 编辑:程序博客网 时间:2024/05/18 18:03
关于C++内存对齐的问题
要想弄清楚C++的内存对齐,需要从以下几个方面入手:
1.什么是内存对齐?
2.为什么要内存对齐?
3.如何做到内存对齐?
这方面内容有点繁琐,慢慢讲下去吧!
1.什么是内存对齐?
所谓内存对齐,就是根据一定的规则将变量存储在内存中。这样说可能有些笼统,大部分人还理解不了。请大家跟着下面的讲解慢慢体会。
2.为什么要内存对齐?
从平台的角度来讲,并不是所有的硬件平台都可以访问任意地址上的任意数据,某些硬件收到限制,只能获取某些地址上的某一类型的数据。这时候通过内存对齐就可以解决硬件异常的问题。
从性能角度来讲,CPU在读取内存数据的时候,如果是内存对齐的,那么CPU会根据对齐的方式读一次,否则,CPU会来回读很多次才能读到数据。这样就大大提高了CPU的访问速度。
3.如何做到内存对齐?
先来测试一下:
定义一个结构体:
Struct A
{
Char a;
Int b;
Short c;
}
请问这个结构体所占用的内存空间是多少字节?
有人肯定毫不犹豫,感觉很简单,说是7个字节。Char占1个字节,int占4个字节,short占2个字节,1+4+2=7.呵呵。。,告诉你答案是12.
对齐规则:
1、 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。
2、 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
#pragma pack(n) 表示设置为n字节对齐。 VC6默认8字节对齐。
按照这一规则我们就可以算出:
a变量的偏移量是0,b变量的偏移量是4,c变量的偏移量是8,所以大致分布是这样的:0xxx|4567|89|xx
记得补齐最后一个规则,因为int占4个字节,整个结构体所占的字节也应该是4的倍数,所以最后补上2个字节成为12字节。
- 关于C语言 内存对齐的问题
- 关于内存对齐的问题
- 关于C语言中数据结构的内存对齐问题
- 关于内存对齐问题
- 关于内存对齐问题
- 关于内存对齐问题
- 关于内存对齐的一些问题整理
- 关于内存地址对齐的问题
- 关于内存对齐处理的问题
- 关于C++内存对齐的问题
- 关于struct的内存对齐问题
- C语言的内存对齐问题
- C/C++中关于struct内存对齐问题
- C/C++中关于struct内存对齐问题
- C/C++中关于struct内存对齐问题
- 关于C语言struct对齐的问题
- 关于C语言内存对齐
- 关于pragma pack的用法--------------C 中的内存对齐问题(转载)
- 奏尊组篆孜妆注啄拙追淄撞兹子纂鬃坠妆
- 两个处理文件的shell脚本
- Zookeeper解析
- 桌纂兹姿做状抓仔坠谞走昨紫浊庄淄祝缀
- 桩捉咨渍椎桩注佐茁啄姿状揍谞驻邹砖租
- 关于C++内存对齐的问题
- sftp服务器配置-vsftpd
- 走锥壮灼鬃注淄遵兹座紫桌祖赚钻姿字啄
- MVN命令行详解
- 林依晨找到挚爱 宣布订婚喜帖曝光
- android程序自动更新
- 子状篆拽醉足字做阻酌资桩谞综卓卒族遵
- 第七周项目1电阻串联
- 佐仔注邹滋转钻尊坠纂纵渍总着柞做椎左