如何管理代码存储器?

时间:2010-07-09 08:16:26

标签: c++ c operating-system

在谈论进程的内存时,我听说过代码内存数据内存等内容。

对于数据内存,有两种主要的管理机制,堆栈和堆。

我现在想知道代码内存是如何管理的?谁管理它?

如果我的陈述不那么明确,请原谅我。

感谢。

4 个答案:

答案 0 :(得分:17)

如果您有兴趣了解有关流程内存管理的详细信息,我建议http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory(以及其他与内存相关的文章)。

代码存储器=文本段

注意地址空间是4GB。当内核创建进程时,它会为其提供虚拟内存。下面是32位操作系统的示例。内核通过处理器MMU管理哪些地址映射到实际RAM。因此,内核和MMU管理代码内存,就像它们管理进程的整个地址空间一样。

Borrowed from duartes.org http://static.duartes.org/img/blogPosts/linuxFlexibleAddressSpaceLayout.png

答案 1 :(得分:4)

代码存储器不需要管理,因为它不会改变。当可执行文件加载到地址空间时,代码只是从可执行文件读入内存。事实上,在现代操作系统上,代码段只是内存映射到可执行文件。

答案 2 :(得分:2)

由操作系统管理。程序运行时,它的代码从可执行文件加载到某个内存地址。根据程序的性质,对代码部分应用了一些更改,例如:跳转到动态链接库已解决。

根据Space_C0wb0y的建议,请查看en.wikipedia.org/wiki/Dynamic_linker了解具体情况。

答案 3 :(得分:0)

您的操作系统提供所谓的系统调用来动态分配内存(malloc,free等),它还提供了加载和执行程序的机制。

当os加载程序时,文本段(代码存储器)被设置,程序中静态分配的内存立即可用。当您的代码调用函数时,函数中的(静态分配的)变量将在堆栈上分配,并且动态分配的内存(例如,使用malloc())将在堆上分配。在程序运行期间,管理内存是你(程序员)的责任(缺少这样做会导致内存泄漏并最终导致长时间运行的程序耗尽内存并且会崩溃,或者极端案例,取决于操作系统,用它来整个操作系统。)

另见本文:http://www.maxi-pedia.com/what+is+heap+and+stack