RAM中的堆栈和堆位置

Nic*_*one 6 memory-management

中间会发生什么? 这个图像和其他类似的图像一直困扰着我一段时间.当我使用时malloc,这应该是动态数据堆的一部分.然而,这似乎是从堆栈的上方限制的,这看起来非常无效.程序无法预测我计划分配多少内存,那么程序如何判断堆栈的放置时间?似乎中间的所有内存都浪费了,我想知道这对于那些可能来自一个小型服务程序的程序是如何工作的,这个程序不使用任何动态内存而不是可能分配巨大的视频游戏记忆的部分.

比方说,我打开微软的油漆.如果我将高分辨率图片粘贴到其中,油漆的内存分配就会急剧增加.这个记忆取自哪里?我真正喜欢的是我上面标记的整个RAM棒的快照,以便可视化计算机的许多程序如何将计算机的内存整体划分,但我只能找到这样的图表,用于单个进程和单个部分RAM.

Bas*_*tch 9

您的图片是不是RAM,但的地址空间的一些过程的虚拟内存.该内核配置MMU管理虚拟内存,提供虚拟地址空间的过程中,并做一些寻呼,以及管理页面缓存.

顺便说一句,它不是编译器增加堆栈(所以你的图片是错误的).编译器正在生成可以推送或弹出调用堆栈上的内容的机器代码.对于malloc分配的堆,C标准库实现包含malloc上述操作系统原语或系统调用的功能,分配虚拟内存页面(例如Linux上的mmap(2)).

在Linux上,进程可以使用mmap(2)munmapand 来更改其地址空间mprotect.当用execve(2)启动程序时,内核正在设置其初始地址空间.另见/proc/(参见proc(5)并尝试cat /proc/$$/maps....)

Windows有类似的功能,但我不知道Windows.

另请阅读操作系统:三个简单的部分