首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新/malloc或删除/空闲是否占用缓存行或使其无效?

新/malloc或删除/空闲是否占用缓存行或使其无效?
EN

Stack Overflow用户
提问于 2015-06-24 09:48:53
回答 3查看 628关注 0票数 6

我对缓存的行为很好奇。以下是与缓存有关的一些问题:

  1. 写操作是否将数据带入缓存?考虑到像Ai = Bi这样的赋值,Ai会被加载到缓存中吗?因为我只是将一些东西写到Ai中,而不是读取它的值。
  2. 当分配大内存时,内存可能来自操作系统。由于安全原因(参考文献 ),操作系统会将数据初始化为零。如果赋值会将数据带入缓存(问题1),这个机制会占用缓存吗?
  3. 假设有一个已分配的数组B,并且整个B现在在缓存中。在我释放数组B之后,B占用的缓存行会变得无效(可用)吗?

有人能给我个提示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-24 11:22:37

从这里开始https://people.freebsd.org/~lstewart/articles/cpumemory.pdf

--

  1. 写操作是否将数据带入缓存?

从该条中:

默认情况下,由CPU核心读取或写入的所有数据都存储在缓存中。有些内存区域不能缓存,但这只是OS实现者必须关注的问题;应用程序程序员看不到它。还有一些指令允许程序员故意绕过某些缓存。这将在第6节中讨论。

--

  1. 当分配大内存时,内存可能来自操作系统。这个机制会占用缓存吗?

可能不会。只有在读取或写入数据之后,它才会占用缓存。从该条中:

在具有需求分页支持的Linux等操作系统上,mmap调用只修改页表.在mmap调用时没有分配实际内存。 当第一次访问内存页时,通过读取或写入数据或执行代码,分配部分就会发生。为了响应随后发生的页面错误,内核控制并使用页面表树确定页面上必须显示的数据。这种解决页面错误的方法并不便宜,但是它发生在进程使用的每一个页面上。

--

3 .Assume,即有一个分配的数组B,而整个B现在在缓存中。在我释放数组B之后,B占用的缓存行会变得无效(可用)吗?

从本文中看,只有在另一个CPU上有写操作时,缓存行才会失效。

多年来发展起来的是MESI缓存一致性协议(修改后的、排他的、共享的、无效的)。当使用MESI协议时,该协议是根据缓存线的四种状态来命名的。..。如果第二处理器想要写入缓存行,则第一处理器发送缓存行内容,并在本地将缓存线标记为无效。

此外,缓存行也可以被逐出:

对于程序员来说,缓存的另一个细节是缓存替换策略,这一点对程序员来说并不有趣。大多数缓存首先清除最近使用最少的元素(LRU)。

根据我使用TCMalloc free()的经验,将内存从缓存中删除并不是一个令人信服的理由。相反,它可能对业绩有害。在free()上,TCMalloc只是将一个已释放的内存块放入其缓存中。当应用程序下一次请求内存块时,这个内存块将由malloc()返回。这就是像TCMalloc这样的缓存器的本质。如果这个内存块还在缓存中,那么它的性能就更好了!

票数 3
EN

Stack Overflow用户

发布于 2015-06-24 10:25:49

这是一篇有趣的文章,您可以在文章中找到更多关于您询问的内容的信息(可能太多):

每个程序员都应该知道关于内存的事情

对于您的问题,您在内存上所做的每一项操作都将被缓存。作为一个程序员,你对它没有任何控制(而且操作系统没有)。请记住,如果您需要实现空间(内存)消耗算法,那么请尝试增加内存局部性。

因此,假设您必须处理1GB的数据,尝试将计算划分为集群(数据部分),并尝试一次完成所有操作。通过这种方式,您将实际使用缓存中的数据,而不需要每次访问外部内存。这可能会提高你的表现。

票数 2
EN

Stack Overflow用户

发布于 2015-06-24 13:20:50

要回答标题问题,不行。这些操作不会使缓存无效,而且是故意的。释放的内存会发生什么?有两个重要的案例。第一,内存将立即循环用于您的程序下一次分配。在这种情况下,将地址仍然保存在缓存中是有效的,因为这样可以减少对主内存的写入次数。

但是,即使内存没有被直接重用,内存分配程序也可以在幕后合并空闲块或执行其他操作。这通常涉及到写入以前由您的数据分配的空间。毕竟,释放内存并不会在物理上破坏内存。它只会让主人。在delete之后,所有权将从程序转移到运行时或操作系统。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31023260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档