C中的pragma对齐是什么?

时间:2012-11-29 08:11:42

标签: c memory-management operating-system

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

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

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