内存对齐与Cpu利用率

内存对齐与Cpu利用率,c,linux,arm,C,Linux,Arm,我有一个运行Linux的ARM平台,其中L1行长度为64字节 我决定用另一个malloc替换malloc(通过LD_PRELOAD),在这个malloc中,无论malloc的大小如何,内存都必须对齐64字节 我希望看到内存消耗增加(实际发生的情况),同时CPU利用率下降。这没有发生。换句话说,内存和Cpu利用率都提高了 这怎么解释呢 谢谢,这取决于您使用的malloc()。如果对大块数据使用malloc(),这应该不会产生真正的区别。但是如果malloc()元素小于64字节,则可能无法有效地使用

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

我决定用另一个malloc替换malloc(通过LD_PRELOAD),在这个malloc中,无论malloc的大小如何,内存都必须对齐64字节

我希望看到内存消耗增加(实际发生的情况),同时CPU利用率下降。这没有发生。换句话说,内存和Cpu利用率都提高了

这怎么解释呢


谢谢,

这取决于您使用的
malloc()
。如果对大块数据使用
malloc()
,这应该不会产生真正的区别。但是如果
malloc()
元素小于64字节,则可能无法有效地使用缓存

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


因此,如果单独分配的数据位于同一缓存线中,则获取其中一个元素将使您免费获得内存中靠近的其他元素。但是,如果每个元素都像使用修改的分配器一样占用一个完整的缓存线,则不再是这样。对数据的每次访问都会导致缓存未命中,您的缓存可以保存的数据数量将减少,并且您会有缓存大小减小的印象。总的结果将增加您的计算时间。

如何解释这一点?
-这是不够的信息。你在哪个站台?确切地ARM是一个支持特定体系结构的集合,有很多ARM平台。你们有8位处理器吗?128位?您是否排除了这样的可能性,即您的
malloc
只是速度较慢,占用了更多内存?如何衡量cpu利用率和内存利用率?你是如何进行测试的?显示您的malloc实现?你是怎么运作的?替换它?您是否替换了整个C库?等等。如何重现这个问题?嗯,我的办公桌上有一些手臂平台,甚至还有一部手机,口袋里有Cortex-A53。我能测试一下你的陈述吗?复制条件?什么条件?我该怎么做?你分享源代码了吗?您是否共享了您的
malloc
实现?您是否共享了原始的malloc实现(glibc?musl?newlib?)?你是否分享了你是如何完成论文的?请让你的问题重现,这样其他人可以测试它,验证,这样其他人可以验证它。同时创建一个,您将有TLB未命中(MMU查找)和可能的交换。注意,linux确实对代码索引节点“要求分页”,即使您的系统没有交换,您也可能会将代码从内存中踢出;稍后从inode重新加载。以及:对于其他分配器细微差别;这主要是重新迭代缓存的问题。