LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1077|回复: 5

“机器字对齐优化选项”会做些什么?

[复制链接]
发表于 2003-8-15 11:13:19 | 显示全部楼层 |阅读模式
看了“我今天为招聘新员工出的C语言考题”一贴,获益甚多。


zywwzy兄回答时说“这里首先有一个前提,编译器没有使用机器字对齐优化选项,基于x86 cpu的操作系统(linux,windows随便)C语言中局部变量在内存中的存放是连续的。”,从来没有使用过机器字对齐优化选项,请问添加机器字对齐优化选项后,编译器会干些什么?
发表于 2003-8-15 15:56:00 | 显示全部楼层
浪费一些空间,增加速度。
因为cpu读取都是按字进行的,“字对齐”就是说一个变量是存在同一个字中,这样就可以读取一次内存而得到这个变量,否则的话,有可能一个变量存在两个字中,这时就要分两次读取了。
 楼主| 发表于 2003-8-16 08:48:52 | 显示全部楼层
一字两个字节,难道对所有的类型都用一个字来存储?但有的是一字节,两子介,还有四字节的……“字对齐”所选用的“字”是多大?
发表于 2003-8-16 08:53:45 | 显示全部楼层
最好的办法是自己作试验。写一个结构:
struct x {
char c;
int i;
long l;
double f;
}
然后分别用优化和不优化的方式编译并打印其成员的地址,就可以看出其中的差异了。
发表于 2003-8-16 11:11:09 | 显示全部楼层
哦,我上面所说的是在一个字长之内的。大于一个字长的当然要存在几个字里面了。
发表于 2003-8-17 02:59:32 | 显示全部楼层
应该说是默认时变量保存在4的倍数开始处

也就是
struct {
  char c;0x00  地址
  it i;0x04
}

这就是对齐
如果想取消对齐在FAQ中有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表