设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
“机器字对齐优化选项”会做些什么?
返回列表
查看:
1089
|
回复:
5
“机器字对齐优化选项”会做些什么?
[复制链接]
九剑十三
九剑十三
当前离线
积分
5
IP卡
狗仔卡
发表于 2003-8-15 11:13:19
|
显示全部楼层
|
阅读模式
看了“我今天为招聘新员工出的C语言考题”一贴,获益甚多。
zywwzy兄回答时说“这里首先有一个前提,编译器没有使用机器字对齐优化选项,基于x86 cpu的操作系统(linux,windows随便)C语言中局部变量在内存中的存放是连续的。”,从来没有使用过机器字对齐优化选项,请问添加机器字对齐优化选项后,编译器会干些什么?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
发表于 2003-8-15 15:56:00
|
显示全部楼层
浪费一些空间,增加速度。
因为cpu读取都是按字进行的,“字对齐”就是说一个变量是存在同一个字中,这样就可以读取一次内存而得到这个变量,否则的话,有可能一个变量存在两个字中,这时就要分两次读取了。
回复
支持
反对
使用道具
举报
显身卡
九剑十三
九剑十三
当前离线
积分
5
IP卡
狗仔卡
楼主
|
发表于 2003-8-16 08:48:52
|
显示全部楼层
一字两个字节,难道对所有的类型都用一个字来存储?但有的是一字节,两子介,还有四字节的……“字对齐”所选用的“字”是多大?
回复
支持
反对
使用道具
举报
显身卡
kj501
kj501
当前离线
积分
5317
IP卡
狗仔卡
发表于 2003-8-16 08:53:45
|
显示全部楼层
最好的办法是自己作试验。写一个结构:
struct x {
char c;
int i;
long l;
double f;
}
然后分别用优化和不优化的方式编译并打印其成员的地址,就可以看出其中的差异了。
回复
支持
反对
使用道具
举报
显身卡
pupilzeng
pupilzeng
当前离线
积分
2280
IP卡
狗仔卡
发表于 2003-8-16 11:11:09
|
显示全部楼层
哦,我上面所说的是在一个字长之内的。大于一个字长的当然要存在几个字里面了。
回复
支持
反对
使用道具
举报
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-8-17 02:59:32
|
显示全部楼层
应该说是默认时变量保存在4的倍数开始处
也就是
struct {
char c;0x00 地址
it i;0x04
}
这就是对齐
如果想取消对齐在FAQ中有
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表