内存对齐与Cpu利用率

问题描述 投票:2回答:1

我有一个运行Linux的ARM平台,其中L1线长64个字节。

我决定将malloc(通过LD_PRELOAD)替换为另一个malloc,其中内存必须是64字节对齐,无论给予malloc的大小。

我期待看到CPU利用率下降时内存消耗增加(实际发生)。这没有发生。换句话说,内存和CPU利用率都在上升。

怎么解释这个?

谢谢,

c linux arm
1个回答
3
投票

这取决于你malloc()。如果你使用malloc()获取大块数据,这不应该产生真正的差异。但是如果你的malloc()元素小于64字节,你可能不会有效地使用缓存。

malloc()按程序顺序在内存中分配元素。如果几个malloc()s接近,则元素将位于连续的内存地址中,并且很可能它们将在同时创建时一起使用。这就是所谓的spatial locality原则。当然没有任何保证,特别是对于动态分配的数据,但在大多数程序中都观察到空间局部性。这个原则的实际意义在于它允许更好地使用缓存。缓存未命中是昂贵的(您必须从内存中获取64个字节),但如果您在内存中使用关闭元素,则只需支付一次。

因此,如果单独分配的数据位于同一个缓存行中,则获取其中一个元素将为您带来内存中关闭的其他元素。但是如果每个元素都占用了与修改后的分配器一样的完整缓存行,那么它就不再适用了。每次访问数据都会导致缓存未命中,缓存可以容纳的数据量会减少,您会觉得缓存大小会减少。总结果将是您的计算时间增加。

© www.soinside.com 2019 - 2024. All rights reserved.