2012-11-29 29 views
2

最近當我正在瀏覽代碼時,我發現#pragma DATA_ALIGN(var,4 * 1024)。 var是一個大約20k長的結構變量。我在網上搜索了這個,找不到任何有用的東西。任何人都可以提供給我的鏈接或對此有所瞭解?什麼是C中的編譯指示對齊?

+1

一般而言'#pragma'是編譯器特定的,至少應該包含一些關於所用編譯器的信息。 –

回答

9

這意味着var結構將進行頁面對齊(大多數計算機體系結構中的標準頁面大小爲4K = 4096字節),即它將存儲在地址可分割4096的位置。這種方法提高了性能,因爲OS通過做所謂的page fault從磁盤(即paged memory)獲取等於頁面大小的數據塊中的數據。每個page fault是處理器和I/O系統的附加工作。儘量減少page faults的數量是提高性能的強有力手段。如果數據不是頁面對齊的,訪問它可能需要額外的page fault,而只需要一部分帶來的數據。

編輯: 雖然在大多數情況下,對準4K是由於內存管理,有可能是其他原因調整,主要是硬件的限制 - 如被正確地指出的@CodePainters。

+3

雖然很可能你是對的,但你不知道目標系統和應用程序 - 這種對齊的原因可能完全不同(例如嵌入式片上系統中的DMA控制器要求)。 –

+0

@CodePainters你說得對,我會添加到答案。 – SomeWittyUsername

+0

非常豐富。我也找不到有關這方面的很多信息。非常感謝你。 –

2

#pragma指令爲每個編譯器提供了一種方法,可以提供機器和操作系統特有的功能,同時保持與C和C++語言的整體兼容性。 Pragma根據定義是機器或操作系統特定的,並且通常對於每個編譯器都不相同。

我認爲http://www.songho.ca/misc/alignment/dataalign.html將有助於理解數據對齊。 &正如你所說的var是一個大小約爲20k的結構,那麼爲這個結構分配的內存將與頁面對齊& @ icepack的答案已經解釋了它。

相關問題