30
sizeof() 简介
关于内存对齐:对于 n 字节的元素(n=2、4、8...), 它的首地址能被 n 整除才能
获得最好的性能!
是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组
名)或常量时,它不需要用圆括号。
它在编译时起作用,而不是运行时。
这是初学者问得最多的一个问题,所以这里有必要多费点笔墨。让我们先看一个结构
体:
问 等于多少聪明的你开始思考了, 占 个字节, 占 个字节,那
么加起来就应该是 。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是
错的! 中按默认设置得到的结果为 。
!" 为什么受伤的总是我
请不要沮丧,我们来好好琢磨一下 的定义—— 的结果等于对象或者类型
所占的内存字节数,好吧,那就让我们来看看 的内存分配情况:
#$$%&''''''''
定义上面的变量后,加上断点,运行程序,观察 所在的内存,你发现了什么
以我的 ( 为例, 的地址为 &'') ,其数据内容如下:
'') *''''''''
发现了什么怎么中间夹杂了 + 个字节的 看看 ,- 上的说明:
!../0".12/%/
%34"/0.0052"0/54(
原来如此,这就是传说中的字节对齐啊!一个重要的话题出现了。
为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否
则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的
数据变量也是如此),让宽度为 的基本数据类型( 等)都位于能被 整除的