看汇编时发现了这么一句话:
"...同一个地址即可以看作字节单元的地址,又可以看成字单元、双字单元或4字单元的地址,这要根据使用情况确定。字单元的地址可以是偶数也可以是奇数。但是,在8086和80286中,访问存储器(要求取数或存数)都是以字为单位进行的,也就是说,机器是以偶地址访问存储器的,这样,对于奇地址的单元,要去一个字需要访问两次存储器,当然这样花费的时间多。在8086及其以后续的32位处理机中,双字节单元地址为4的整数倍数时访问存储器的速度可以较快.同样,4字单元的地址为8的倍数时访问速度更快..."
看了这句话后我就在想,结构体中的'对齐'是不是就是因为这个而产生的。后来多亏论坛上各路朋友的帮忙答疑,证实了我的看法,"对齐"目的确实是为了减少取指令次数,提升速度,代价是耗费较多的空间。
并且请他们的回帖中还了解到,结构体中的“对齐”其实是“补白”,而真正的对齐(alignment)其实是语言本身要求的,比如C/C++规定对齐很多时候处于类型转换等考虑的,具体情况请看C99和C++2003标准。这个对齐对于多数系统一般而言8字节足够。
评论