2

最近在查看代码时,我发现#pragma DATA_ALIGN(var, 4*1024)。var 是一个大约 20k 长的结构变量。我在互联网上搜索了这个,找不到任何有用的东西。任何人都可以提供链接或对此有所了解吗?

4

2 回答 2

10

这意味着var结构将是页面对齐的(大多数计算机体系结构中的标准页面大小为 4K=4096 字节),即它将存储在地址可被 4096 整除的位置。这种方法提高了性能,因为操作系统以块的形式获取数据paged memory通过执行所谓的page fault. 每个page fault都是处理器和 I/O 系统的额外工作。最小化数量page faults是提高性能的重要手段。如果数据不是页面对齐的,访问它可能需要一个额外的page fault,而只需要一部分带来的数据。

编辑:虽然在大多数情况下对齐到 4K 是由于内存管理,但可能还有其他对齐原因,主要是硬件限制 - 正如@CodePainters 正确指出的那样。

于 2012-11-29T08:12:52.560 回答
2

#pragma 指令为每个编译器提供了一种方法来提供特定于机器和操作系统的功能,同时保持与 C 和 C++ 语言的整体兼容性。根据定义,编译指示是特定于机器或操作系统的,并且通常对于每个编译器都不同。

我认为http://www.songho.ca/misc/alignment/dataalign.html将有助于理解数据对齐。&正如你所说的 var 是一个大小约为 20k 的结构,那么分配给这个结构的内存将被对齐为页面对齐 &@icepack 的答案已经解释过了。

于 2012-11-29T08:22:56.867 回答