首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一直很不解,关于栈区的数据和堆区的数据还有静态常量区的

2012-08-14 
一直很疑惑,关于栈区的数据和堆区的数据还有静态常量区的其实我一直都很想问一下,那些常量区是在哪里的??

一直很疑惑,关于栈区的数据和堆区的数据还有静态常量区的
其实我一直都很想问一下,那些常量区是在哪里的??还有栈区的数据和堆区的数据也是在哪里的??是不是都是在内存里面的??
然后在运行的时候,它们就在内存里面把它们分成几个区域:栈区和堆区还有常量区的(顺便问下除了这几个区域还有其它区的吗??)??
很疑惑~~求解。。。

[解决办法]
给我网址楼主自己看吧,也是我搜的:
http://www.cppblog.com/prayer/archive/2009/08/17/93594.html
[解决办法]
都在内存里,不过加载到了不同的位置

具体的位置,看loader的实现策略了,不过栈在高地址,堆在相对地址,代码段更加低

然后,栈区存储的是函数的局部变量,堆区是malloc/new出来的

此外还有bss等区域,这个,主要是看link的实现了,link想区分的细点,分的就更加多
[解决办法]
不是物理内存空间,是虚拟内存空间

再深下去,你要涉及到操作系统的内存管理了,每个进程独占4G(x86下)的虚拟地址空间
然后,操作系统负责管理这些事,把进程需要的内存页面映射到物理页面上去,看起来,所有进程就都独享这么4G的虚拟地址了(当然,如果全部都用完了,那是另外一码事了,所以就出现了所谓的虚拟内存,swap分区这样的东西)。
然后呢,操作系统约定好,虚拟内存从哪里到哪里,属于什么区域,从哪里到哪里,又属于什么区域
然后,系统加载一个可执行文件的时候,根据可执行文件内部的结构,就把不同的部分,读到内存的不同位置
具体哪些区域有多大,这个要看具体的实现了,不同的系统,实现稍有区别,你不用太多的去在意,起码,一般情况下不需要。

热点排行