内存地址范围的问题?

zzmsl 2006-11-16 06:12:47
大家都知道
int a = 1;
cout << &a <<endl;
就会出现一个类似于 0012FEC0 的内存地址

这个值是不是指向固定的物理内存块?
这个 0012FEC0 内存地址是由谁定义的?
如何知道系统内存地址的范围?
...全文
310 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hailongchang 2006-11-17
  • 打赏
  • 举报
回复
0012FEC0 是一个虚拟地址

这个值是不是指向固定的物理内存块?
-------------------------------------
不是

这个 0012FEC0 内存地址是由谁定义的?
--------------------------------------
这个是加载器加载的地址空间所决定的

如何知道系统内存地址的范围?
---------------------------------------
系统可寻址范围就是4GB,当然你没有那么大内存,这是由CPU的保护模式内存管理机制所决定的
myskyx 2006-11-17
  • 打赏
  • 举报
回复
应该是进程地址的偏移值吧
goodluckyxl 2006-11-17
  • 打赏
  • 举报
回复
虚拟内存,所有你在操作系统上的运行时看到的地址
都是虚拟地址
他通过一个MMU内存管理单元会进行重新映射换算成真正的物理地址
HappyTree 2006-11-17
  • 打赏
  • 举报
回复
在windows下,栈的地址是虚拟内存地址,每个进程都有32位的地址空间。操作系统负责虚拟地址到物理内存的映射。因此,虽然两个进程可能都使用0012FEC0的地址,但该地址实际映射的物理内存是不同的。
使用虚拟地址空间,简化了应用程序的内存管理,使每个进程都有完整的32位地址空间。但实际可用的内存仍然依赖于实际的物理内存。因为如果无物理内存可映射,虚拟地址便无法提交。
建议楼主阅读经典的《windows核心编程》
lei001 2006-11-16
  • 打赏
  • 举报
回复
地址是由系统分配的,是从不用的内存中找出的。
ckt 2006-11-16
  • 打赏
  • 举报
回复
定义变量a时,系统分配给a的内寻的地址.

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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