如果我两次运行相同的程序,将共享哪部分内存

时间:2015-09-04 18:58:58

标签: c memory operating-system

我在上面的一个职业论坛中看到问题在面试中被问到,我看到了不同的答案。很高兴知道SO的专家说什么。

我认为所有内存都将被清除,并且会在执行第一个程序时重新开始。

4 个答案:

答案 0 :(得分:1)

不会共享任何虚拟内存。

装载机可以'重复使用相同的物理内存页面 并且它可能'重用一些物理内存页面 并且它可能'不要重复使用任何物理内存页面。

这完全取决于当前的内存负载'

您是否了解'映射'的概念?记忆页面和'虚拟'地址?虚拟'怎么样?记忆? '工作集'的概念怎么样?记忆页面?

总的来说,这些概念导致:

您的程序在物理内存中的地址不确定。

从一次执行到下一次执行,虚拟地址空间中程序的地址可能相同。

答案 1 :(得分:0)

这个问题唯一合理的答案是:
"这个问题没有合理的答案。简短的回答是:“没有。”这或多或少都是真实的,这取决于底层的硬件和操作系统 - 如果实际存在一个,那是不必要的。对于C语言本身,如果这是一个C语言问题,只有声明为静态或具有显式初始化程序的内存将在启动时设置值,因此任何其他变量理论上都可能包含先前运行的值。 "

  

我认为所有的记忆都会被清除

面试官可能会抓住这样的答案。谁会清除它,为什么?

答案 2 :(得分:0)

这个问题的答案完全取决于操作系统。某些系统具有运行相同应用程序(或库)以共享同一副本的进程的机制。其他人没有。

旧的多用户系统比今天更常见的系统更适合这种情况。

答案 3 :(得分:0)

如果它同时执行(假设程序运行相同),则最可能共享文本区域(包含代码位)。这是因为虽然两个进程的虚拟地址不同,但是内核中的文本区域的映射可以共享到下一次执行相同的二进制文件。 程序的其他区域(如数据,堆栈等)对于不共享的流程执行实例是唯一的。