为什么要内存对齐?

mountaineer 2003-07-07 05:39:20
加精
想知道why? 有什莫好处,如何作。
多谢啦
...全文
3740 202 打赏 收藏 转发到动态 举报
写回复
用AI写文章
202 条回复
切换为时间正序
请发表友善的回复…
发表回复
w803007 2003-11-14
  • 打赏
  • 举报
回复
收藏!
大健 2003-07-21
  • 打赏
  • 举报
回复
学习
Wenxy1 2003-07-21
  • 打赏
  • 举报
回复
楼上满天星星。
^0^
reddatura 2003-07-21
  • 打赏
  • 举报
回复
真强,什么时候我也能来这里“吵架“就好了!
swimmer2000 2003-07-21
  • 打赏
  • 举报
回复
看本接口技术的书,里面讲了cpu怎么取数的,数由两字节组成,奇地址和偶地址,如果从奇地址开始要两个周期,若从基地址开始,只要一个周期。这和cpu的工作方式有关。
happycock 2003-07-21
  • 打赏
  • 举报
回复
给楼上的一句话,你不发言,永远也到不了五星
frankzch 2003-07-21
  • 打赏
  • 举报
回复
超人气呕像巨星全阵容,偶也来看看
什么时候有5颗红星了,就来发表意见
现在是学习
1998810 2003-07-21
  • 打赏
  • 举报
回复
<inside c++ object model>里好象有解释
wujianfeng 2003-07-20
  • 打赏
  • 举报
回复
我想也是
hswxf 2003-07-20
  • 打赏
  • 举报
回复
我认为这个问题是可以从二个方面理解:
1、硬件结构决定了软件的性质,在硬件设计上是一个基于8位的数据线来定义微程序的。这样的软件设计只能是基于8位的,指令的形成也是这样的,是一个基于8位的理解来完成对程序的认识;在存储器的设计中为了上述的理由分为偶存储体与奇存储体各是8位,每次针对内存的存取数据均以二次取出(16位),这是硬件上的规定或说是设计上确定的。
2、如果只从高层来理解,只能是一种“产生正确”的答案的方法是什么的讨论,这一点上楼上英雄说的精彩。
贴主的这个问题应该是一个软对硬的要求,从硬来解答软的原因
bearfly1980 2003-07-20
  • 打赏
  • 举报
回复 1
找本关于计算机结构的看看就知道了!!!!
计算机中内存是按照bank来组织的,比如说:bank1对应第一个byte,bank2对应第二个byte,一般来说访问内存时,需要cpu产生一个选通信号,如果是按照bank来读写的话,一个地址选通信号可以同时选通两个bank,从而读出bank1,bank2的数据,这样对齐的话就可以在一个读写周期里读出两个byte,而如果没有对齐,要读出两个byte则要两个读写周期!!!
maojunhua 2003-07-20
  • 打赏
  • 举报
回复
应该是效率,看Andrew S.Tanenbaum (Minix开发者)的《结构化计算机组成》或者John L. Hennessy(Mips提出者)和David A. Patterson(Risc提出者)《计算机体系结构:一种量化的研究方法》。我觉得从体系结构理解比较好,讨论在软件层的影响又是另外一回事了,前为因后为果,不能把影响说成原因
minghui000 2003-07-20
  • 打赏
  • 举报
回复
Regardless of the state of the $A directive, variables and typed constants are always aligned for optimal access. In the {$A+} state, execution will be faster.
1cs1ak1 2003-07-19
  • 打赏
  • 举报
回复



up



ckacka 2003-07-19
  • 打赏
  • 举报
回复
glassshark()和internet(bbc)是同一个人
cherry0805 2003-07-19
  • 打赏
  • 举报
回复
我也是,象牛人学习一下
pressman 2003-07-19
  • 打赏
  • 举报
回复
学习,
我是刚刚来的菜鸟!
Jupin 2003-07-19
  • 打赏
  • 举报
回复
(摘自MSDN)
应用程序通常在地址中对齐结构成员,而这些地址对所涉及的数据类型和处理器是“自然的”。例如,一个 4 字节数据成员的地址应该是 4 的倍数。

当编写用于移植到多处理器的代码时,此原则特别重要。没有对齐的 4 字节数据成员所在的地址不是 4 的倍数,这将导致 80386 处理器的性能损失和 MIPS® RISC 处理器的硬件异常。后一种情况中,虽然系统会处理异常,但是性能损失更明显。

下面的原则确保 Win32 处理器的正确对齐:

类型 对齐方式
char 与字节边界对齐
short(16 位) 与偶数字节边界对齐
int 和 long(32 位) 与 32 位边界对齐
float 与 32 位边界对齐
double 与 64 位边界对齐
structures 任何成员的最大对齐要求
unions 第一个成员的对齐要求

编译器自动根据这些要求对齐数据,在结构中插入空白,直至 /Zp 选项或 #pragma pack 指定的限制(默认包大小)。例如,/Zp2 允许最多 1 字节的空白,/Zp4 允许最多 3 字节的空白,诸如此类。Windows 3.x 的默认包大小为 2,而 Win32 的默认包大小为 8。因此:

如果用 /Zp 或 #pragma pack 指定了封装限制,则不能获得正确的 Win32 对齐(默认值)。
不同的 Win32 默认设置会改变某些结构成员的偏移量,从而影响源代码。仔细检查代码,确认是否已经硬编码这些偏移量,或者代码是否根据特定的默认包大小进行假设。
giantzz 2003-07-19
  • 打赏
  • 举报
回复
为什么要急着结贴,再等等,汇编版的牛人还没到齐!
放心,保证给您一个满意的答案!



internet 2003-07-19
  • 打赏
  • 举报
回复
来了许多带"星"的,我好怕呢.
嗯,晚上睡不着,要作恶梦了.(坏了,又写错了一个字).
加载更多回复(182)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧