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