繁体   English   中英

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

[英]Does malloc/new return memory blocks from Cache or RAM?

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

提前致谢。

当你在操作系统中作为一个过程生存时,你就被抽象了,你只能获得记忆

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

来自虚拟内存。 只要进程需要,操作系统就会将所需的页面放入RAM中。

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM