|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 大家帮忙看看内存对齐问题!
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1235
人关注过本帖
标题:
大家帮忙看看内存对齐问题!
只看楼主
加入收藏
divingmaomao
等 级:
新手上路
帖 子:8
专家分:0
注 册:2010-8-9
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:10 回复次数:16
大家帮忙看看内存对齐问题!
“一个字或双字操作数跨越了4 字节边界,或者一个四字操作数跨越了8 字节边界,被
认为是未对齐的,从而需要两次总线周期来访问内存”。
不太理解“双字操作数跨越了4 字节边界” 和 “四字操作数跨越了8 字节边界”,大家帮忙解释解释.
谢谢!
[
本帖最后由 divingmaomao 于 2010-8-10 09:24 编辑
]
搜索更多相关主题的帖子:
内存
2010-08-09 17:03
举报帖子
使用道具
赠送鲜花
forever74
来 自:CC
等 级:
版主
威 望:
58
帖 子:1705
专家分:4345
注 册:2007-12-27
第
2
楼
收藏
得分:5
字,也就是WORD,这个类型在16位windows编程的时代被定义为16位整数类型。
尽管如今的系统环境下,机器字的长度是32位甚至64位,但是您的问题里面那句话是引用16位时代的文献的。
也就是说,您的上下文里面,双字就是指32位变量,四字就是指64位变量。
32位变量的首地址如果是4n,那么它实际占用4n,4n+1,4n+2,4n+3四个地址,这叫做内存对齐。
反之,如果32位变量的首地址不是4n型,
例如4n+1,那么它就得占用4n+1,4n+2,4n+3,4(n+1)四个地址,这个就叫“跨越4字节边界”,内存没有对齐。
同理,一个64位变量如果占用8n到8n+7的地址,那就是没有跨越边界,内存对齐了;否则就是跨越8字节边界,不对齐。
对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-09 18:09
举报帖子
使用道具
赠送鲜花
pangding
来 自:北京
等 级:
贵宾
威 望:
94
帖 子:6784
专家分:16751
注 册:2008-12-20
第
3
楼
收藏
得分:0
我觉得已经解释的很清楚了~
2010-08-10 01:56
举报帖子
使用道具
赠送鲜花
divingmaomao
等 级:
新手上路
帖 子:8
专家分:0
注 册:2010-8-9
第
4
楼
收藏
得分:0
谢谢!
一直以32位理解,现在整个串起来还是有些地方不能想通,能串起来讲解下吗?
一次总线周期访问(32位下
char、int、long、longlong)如何寻址?————>内存对齐后如何寻址?————>为什么说(32位下
char、int、long、longlong)内存对齐后一次总线周期就能访问?
麻烦高手们解惑?
谢谢!
2010-08-10 09:22
举报帖子
使用道具
赠送鲜花
pangding
来 自:北京
等 级:
贵宾
威 望:
94
帖 子:6784
专家分:16751
注 册:2008-12-20
第
5
楼
收藏
得分:0
它只能寻址对齐的,所以对齐了一下就找到了。对不齐的,只能寻址两次,一次读一半,然后在拼起来。
比如下面,+号的地方是应该对齐的位置。
程序代码:
+---+---+---+---
1234
+---+---+---+--- **
1234
**
如果是第一种情况,一次就能读出1234
第二种,第一次读第一个格扔掉前两位,第二次读第二个格扔掉后两位,拼成1234。
2010-08-10 09:40
举报帖子
使用道具
赠送鲜花
divingmaomao
等 级:
新手上路
帖 子:8
专家分:0
注 册:2010-8-9
第
6
楼
收藏
得分:0
都约定好的吗?
如果是读取char类型: 无论在什么位置(不管是否对齐)一次总线周期访问都能读取到(丢弃无效位吗?);
如果是读取short类型:就约定从2个字节对齐的地址开始访问,一次总线周期(32位)读取2个字节;
如果是读取int类型:就约定从4个字节对齐的地址开始访问,一次总线周期(32位)读取4个字节;
那如果是读取64位数据怎么办?
这样理解对吗?
2010-08-10 10:47
举报帖子
使用道具
赠送鲜花
forever74
来 自:CC
等 级:
版主
威 望:
58
帖 子:1705
专家分:4345
注 册:2007-12-27
第
7
楼
收藏
得分:0
如果数据总线是32位的,那么对于8字节内存对齐来说,它的作用无非是保证两周期读取数据而不拖延到三个周期。
BTW:
(1)对于某些系统,你可以要求它不进行内存对齐检查。
(2)对于某些物理内存,比如DDR,每个实际的总线周期可以处理数据超过1次,这个不在本次讨论范围。
对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-10 10:56
举报帖子
使用道具
赠送鲜花
divingmaomao
等 级:
新手上路
帖 子:8
专家分:0
注 册:2010-8-9
第
8
楼
收藏
得分:0
对于char类型:无论在奇数边界还是在偶数边界,32位寻址从偶地址开始,是因为每次读取32位都能读取到吗?
还请高手们指出不对的地方,详细解释下内存对齐的缘由!!!
不胜感激!
2010-08-10 11:13
举报帖子
使用道具
赠送鲜花
死了都要C
来 自:四川成都
等 级:
贵宾
威 望:
13
帖 子:1582
专家分:116
注 册:2006-12-7
第
9
楼
收藏
得分:0
这个是哪方面的知识啊。。汇编?
女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-08-10 12:23
举报帖子
使用道具
赠送鲜花
divingmaomao
等 级:
新手上路
帖 子:8
专家分:0
注 册:2010-8-9
第
10
楼
收藏
得分:0
查了计算机系统结构,找到相关解释:存储器宽度32位,一个存储周期可以访问4个字节,按照这个思想去理解,跨越边界的问题也能想通的了,这边可以贴图就好了!
图片附件: 游客没有浏览图片的权限,请
登录
或
注册
2010-08-10 15:19
举报帖子
使用道具
赠送鲜花
17
1/2页
1
2
快速回复:
大家帮忙看看内存对齐问题!
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.018125 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved