【发布时间】:2020-06-07 13:12:29
【问题描述】:
如何在 C 中获取 CPU 的memory granularity?
假设我想分配一个数组,其中所有元素都正确对齐内存。我可以将每个元素填充到一定大小 N 来实现这一点。我如何知道 N 的值?
注意:我正在尝试创建一个内存池,其中每个插槽都是内存对齐的。任何建议将不胜感激。
【问题讨论】:
-
编译器和内存管理器(malloc 等)会为你做这些。
-
有趣的问题与 C 的基础之一相冲突:可移植性。该代码被认为与处理器架构无关,并且所有端口特定的调整都是在编译器端口相关代码中完成的,正如@PaulOgilvie 所说。无论如何,在某些情况下,它可能是对机器特定代码的真正要求,例如在极端效率成就问题或电路板开发中。不幸的是,C 语言对此没有任何标准支持。您必须使用
#if/#else/#endif的旧条件编译。 -
您的问题不清楚。有word对齐(针对单个对象),有page对齐(针对MMU/VM),还有cache对齐(多级)。所有这些都可以存在或不存在,具体取决于架构。
标签: c memory-management memory-alignment granularity