malloc / new是否从Cache或RAM返回内存块?

时间:2009-09-24 11:31:47

标签: c++ c memory memory-management

我想知道malloc / new是否从Cache或RAM返回内存块。

提前致谢。

7 个答案:

答案 0 :(得分:16)

当你在操作系统中作为一个过程生活时,你被抽象出来了,你只能获得内存

你不应该担心这一点,操作系统会为你管理所有这些,而内存单元会把东西从一个移动到另一个。但是你仍然可以看到一个虚拟内存布局。

答案 1 :(得分:5)

来自虚拟内存。无论何时进程需要,操作系统都会将所需的页面放入RAM中。

答案 2 :(得分:2)

mallocoperator new会为您提供一大块地址空间

操作系统将使用一些物理存储来支持这一块地址空间。存储可以是系统存储器或页面文件的块,并且实际存储位置可以在各种物理存储设备之间移动,并且从应用程序的角度来看这是透明地处理的。此外,CPU和内存控制器(板载或其他)可以缓存系统内存,但这通常(很大程度上)对操作系统是透明的。

答案 3 :(得分:0)

如前所述,你无法知道。缓存/ RAM /硬盘被抽象为虚拟内存。但我认为如果您可以测量访问时间,您可能会知道是否正在访问RAM或缓存。但是在第一次访问RAM之后,内存块将被复制到缓存中,后续访问将从缓存中提供。

答案 4 :(得分:0)

这在很大程度上取决于。在程序开始时,操作系统提供给你的内存可能不会被分页(至少在Linux上没有)。但是,如果你释放一些东西,然后得到一个新的分配,内存可能在缓存中。

有一个触及内存的构造函数,然后它在构造之后肯定会在缓存中。

如果您使用Java进行编程,那么您可能会拥有一个非常酷的内存分配器,并且更有可能获得缓存中的内存。

(当我说缓存时,我的意思是L2.L1不太可能,但你可能会很幸运,特别是小程序)。

答案 5 :(得分:0)

您无法直接处理处理器缓存,处理器(几乎)透明地管理它...最多可以使缓存行无效或预取;但是你访问内存地址(如果你没有处于实模式,通常是虚拟的),处理器将始终从内部存储器中提供数据和指令(如果数据尚未存在,则需要获取)。 / p>

阅读本文以获取更多信息:http://en.wikipedia.org/wiki/Memory_hierarchy

答案 6 :(得分:0)

首先,为应用程序分配的内存是虚拟内存,其地址位于虚拟空间中。其次,不会为您分配L1和L2缓存,由系统管理。实际上,如果为您分配了缓存,系统很难分派任务。