内存与变量关系

1.在编程中声明变量时内存分配其空间,那么内存分配的空间是什么部分(是栈还是堆?)2.内存结构里除了栈,堆外还有哪些部分?(这些是物理内存空间还是虚拟内存空间?)3.假如... 1.在编程中声明变量时内存分配其空间,那么内存分配的空间是什么部分(是栈还是堆?)
2.内存结构里除了栈,堆外还有哪些部分? (这些是物理内存空间还是虚拟内存空间?)
3.假如我玩游戏的话内存分配的是那个空间(栈,堆,还是其他?)
本人是新手,尽量详细解释,谢谢~!
展开
 我来答
hitpisces
2012-01-01 · TA获得超过531个赞
知道小有建树答主
回答量:555
采纳率:0%
帮助的人:398万
展开全部

1,不一定。依照你用的编程语言不同,可能是堆,也可能是栈。静态和动态变量也不一样

2,对每一个程序来说,从高位到低位分别是:“栈区”-“堆区”-“未初始化数据区”-“已初始化数据区”-“代码区”, 理论上物理内存和虚拟内存(其实应该是叫页面文件)对操作系统来说是一样的。每次你新开一个程序,系统都会自动赋予一个平坦的4G的“内存“空间

3,都有。

另外给你一个标准C程序内存结构图,看看就明白了。挺简单的。

更多追问追答
追问
1.内存是从高到低分5层:“栈区”-“堆区”-“未初始化数据区”-“已初始化数据区”-“代码区”。。这个5层是厂家设计内存条的时候分层的? 还是进入系统后系统把内存分5层的? 
2. 每个层的主要作用是什么?为什么分5层啊?
3.另外每次你新开一个程序,系统都会自动赋予一个平坦的4G的“内存“空间,这是什么意思? 假如电脑内存为2G的容量怎么办?
我是新手请原谅。。。
追答
1,不是。所有的这些结构都是针对软件层面说的,或者说是一种逻辑上的理解,并不是真正内存的物理结构是这样的。你可以理解为系统需要程序有这个结构才能执行。
2,高地址主要用来声明一些变量,低地址用来包含正文程序。堆和栈起到变量交换,内存指针之类的高级功能。可以理解为除正文外的地址全部是给系统用的,系统可以标记各种变量,缓存什么的。
3,正如我前面说的一样,对程序来说,它是无法区分所在的位置是页面文件(在硬盘上)还是物理内存里。这二者对它来说是一样的。“平坦”就是这个意思。4G的意思是每个程序最大只能占用4G“内存”(32位系统下),单线程不能超过2G。也就是说,如果你的某个程序起始有1G,但是后来会增大到4G,这时假设你的物理内存只有2G,那么系统会自动在页面文件里分配2G给该程序,但是作为程序本身和运行程序的我们看来,这是一样的。区别在于你的硬盘灯狂闪……那是在分配和读写页面文件。而由于硬盘读写速度远小于物理内存,表现到我们使用者面前就是所谓的“卡顿”了
另外,对32位系统的4G限制是这么来的:每8个bits 为1 Byte,每两个Byte为一个操作,2^32= 4294967296 Byte =4GB。 如果是64位操作系统,那么是2^64= 17179869184 GB
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式