kk3173603 发表于 2012-1-9 14:30:03

对C语言与汇编中内存地址的疑惑

    本人刚开始学习C语言,入门就遇到了一个问题,没想明白,希望大家赐教.
    本人一直以为C语言是可以直接对内存物理地址进行控制的,类似JAVA等一些运行在虚拟机上的高级语言,由虚拟机为程序员虚拟出了一个硬件环境,使得我们无法直接对内存物理地址进行控制.
    本人使了下,首先查看了1000:0000物理地址的值如下图,均为0
http://bbs.fishc.com/data/attachment/album/201201/09/142401kctkfskzkql81tc2.jpg
    然后使用C语言的DEBUG工具查看发现不太一样,如下图所示:
http://bbs.fishc.com/data/attachment/album/201201/09/142403a9ni7kuq3f7up073.jpg




http://bbs.fishc.com/data/attachment/album/201201/09/1424041l6klc1cpihpg1ex.jpg
    不知道是不是我理解错了,希望大家能给指点一些,谢谢各位.

redhat0921 发表于 2012-1-9 15:11:21

C语言是32位地址,你上面那个是16位汇编,当你学WIN32汇编时候,地址就和C语言那一样了

kk3173603 发表于 2012-1-9 16:00:23

redhat0921 发表于 2012-1-9 15:11 static/image/common/back.gif
C语言是32位地址,你上面那个是16位汇编,当你学WIN32汇编时候,地址就和C语言那一样了

感谢你的回答,可以发 个试验截图之类的,我的猜想是,无论系统是16位,还是32位的,内存始终对CPU是线性的,不同的是寻址能力数据总线宽度等,但是对应的物理地址应该是一样的

redhat0921 发表于 2012-1-10 10:33:36

kk3173603 发表于 2012-1-9 16:00 static/image/common/back.gif
感谢你的回答,可以发 个试验截图之类的,我的猜想是,无论系统是16位,还是32位的,内存始终对CPU是线性的,不 ...

硬件上确实是这样,但和系统的关系也是分不开的,例如32位XP只能寻址到4G内存(理论上),但你的32位XP又是使用的64位CPU,那为什么只能支持4G的内存呢?

redhat0921 发表于 2012-1-10 10:35:21

kk3173603 发表于 2012-1-9 16:00 static/image/common/back.gif
感谢你的回答,可以发 个试验截图之类的,我的猜想是,无论系统是16位,还是32位的,内存始终对CPU是线性的,不 ...

还有,既然是16位的系统,那么就肯定是16位的内存地址咯,后面多的内存就空着了

流浪南中国 发表于 2012-1-11 03:54:43

楼主可以共享下 你32位的经验哦
页: [1]
查看完整版本: 对C语言与汇编中内存地址的疑惑