| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1235 人关注过本帖
标题:大家帮忙看看内存对齐问题!
只看楼主 加入收藏
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 9楼 死了都要C
是c语言在系统中的知识

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-08-10 20:33
divingmaomao
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-8-9
收藏
得分:0 
还有高手指正的了,再期待一下!

谢谢!
2010-08-11 13:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
我感觉这个东西从 C 语言的层面不是很好解释。汇编什么的倒是可以理解理解。

像对齐这种问题与硬件关联的比较紧密。而且一般常识也知道,CPU 和 内存之间还有好几层缓存呢,缓存涉及命中的问题,就有很多缓存算法(都由硬件直接实现了)。一般操作系统还要提供虚拟内存之类的支持。在硬件上说是比较复杂的,要是专门学的话,一般得学点 MMU 什么的吧。
把硬件的复杂性掩盖后,就来到软件的层次。可以这么理解,访问一个字节,二个字节,四个字节分别用的都是不同的指令。本身它们的读写速度就有可能是不一样的,这就是为什么一般来说能用 int 的就别用别的。因为硬件一般会针对 int 有特别的优化。
CPU 的寻址方法是一定的,跟你写没写齐没关系,你下达的指令只是相当于“到这个位置,读这么多字节”。之后就得靠 CPU 解释这些指令。要想弄清楚指令周期什么的,得稍微了解点 CPU 的工作原理,和指令的解析方式。总之对齐几乎是个常识,而且就算你自己不了解,编译器也总会帮你优化。好的算法往往不都要有一些前提不是,比如二分法只能用于有序序列一样。不管你学什么知识,发现几乎就不研究不对齐的情况。不是不对齐不能干,是你不对齐干什么呢?
收到的鲜花
  • BlueGuy2010-08-11 18:12 送鲜花  33朵   附言:有些场合,数组能用char尽量用char, int太 ...
2010-08-11 16:41
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
印象中好像SPARC类的CPU,如果你故意制造一个不对齐,它就会在运行时直接告诉你总线错误。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-11 19:54
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,对对对。还有总线错误一说呢!不提我都忘了…… 有的架构是禁止不对齐的。
总之对齐就是了,不对齐的情况,不要研究。
2010-08-11 23:22
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:0 
学习学习。。
2010-08-12 16:37
divingmaomao
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-8-9
收藏
得分:0 
谢谢大家的解答,帮助我又学习了一些新的知识,有时间我再去找些系统方面的资料学习学习,理论基础太薄弱了,就是不想停在 “知道怎么做” 的阶段!

分也不多,还望大家见谅!

再次感谢!
2010-08-13 12:48
快速回复:大家帮忙看看内存对齐问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016546 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved