字节对齐的剖析
一、需要了解的名词和概念
1、数据类型自身的对齐值:即数据本身所占字节长度。
2、结构体或类的自身对齐值:即其中数据成员类型对齐值的最大值。
3、指定对齐值:由编程人员通过#pragma pack(value)指定的value值,通过#pragma pack()代码解除。
4、结构体、类、数据成员的有效对齐值:即2、3以及当前计算机总线长度三者的最大值。
5、圆整: 即...
分类:
其他好文 时间:
2014-09-17 12:03:52
阅读次数:
234
对于IA32指令,Linux沿用的对齐策略是:2字节数据类型的地址必须是2的倍数,而较大的数据类型(int, int*, float和double)的地址必须是4的倍数。Microsoft Windows对齐的要求更为严格--------任何K字节基本对象的地址都必须是K的倍数,K= 2, 4或者8...
分类:
其他好文 时间:
2014-09-14 11:14:06
阅读次数:
245
C/C++内存对齐参考资料:http://wenku.baidu.com/view/8eaaa26925c52cc58bd6bed2.html一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访...
分类:
编程语言 时间:
2014-09-03 12:40:06
阅读次数:
229
结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则...
分类:
其他好文 时间:
2014-09-02 22:48:45
阅读次数:
231
1.什么是对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。 2.计算机为什么要...
分类:
编程语言 时间:
2014-08-27 20:25:38
阅读次数:
315
(一)每个成员的起始地址%每个成员的自身对齐值=0,如果不等于0则先补空字节直至这个表达式成立;(二)结构体的总体长度必须为结构体自身对齐值的整数倍,不够就补空字节。#pragmapack(8)structA{chara;longb;};对于structA来说,对于char型数据,其自身对齐值为1....
分类:
其他好文 时间:
2014-08-27 18:15:38
阅读次数:
274
(转自http://blog.csdn.net/xuxinshao/article/details/2244277)一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的...
分类:
编程语言 时间:
2014-08-27 14:42:18
阅读次数:
193
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、...
分类:
编程语言 时间:
2014-08-11 17:19:12
阅读次数:
475
#pragmapack():取消用户自定义的结构体成员(或类的数据成员)的对齐方式,恢复编译器默认的对齐方式(VC++和GCC编译器默认8个字节对齐,并且,我们可以在编译器的设置里更改编译器的默认设置)。#pragmapack(n):n可以取以下这5个数中的任意一个:1、2、4、8、16自定义结构体...
分类:
其他好文 时间:
2014-08-06 18:40:11
阅读次数:
213
在结构体程序中的字节对齐情况下读取字符长度的方法,其程序如下:
如图所示在程序中有char、int、short三种类型:程序在读取时是按照四字节对齐的方式读取的(即每四个字节读一次),在程序中计算机会先读取char型,读取的长度为2个字节,由于int所占用的是4个字节,所以在读取int时计算机会自动选择4的倍数进行读取,即会在读取char的2个字节后会在空出两个字节,然后再读取int的4个字...
分类:
其他好文 时间:
2014-08-05 19:24:30
阅读次数:
253