2013-08-30 39 views
2

爲什麼PE文件中的段之間有對齊?由於節的確切大小可以在IMAGE_SECTION_HEADER.SizeOfRawData中指定,所以我沒有看到在節之間使用這些「間隙」的任何感覺。PE文件段對齊

在鍵/文件對齊的MSDN文檔中寫有:「有效值爲512,1024,2048,4096和8192」。編譯器禁止/ filealign:0是否有某些原因?

+0

不知怎的,我覺得這是最優化的慢得多的磁盤的神器 - 像軟盤。 512是典型的扇區大小。尋找和讀取會將特定部分的第一個字節放在緩衝區的第一個字節。 –

+0

嗯,我實際上可以使用/ filealign:[數字低於512]編譯我的源代碼,但是當我嘗試運行該PE文件時,它總是以錯誤結尾。 – Peter

+0

我確實覺得這是一個XY問題。你究竟想要解決什麼問題(或者你只是好奇)? –

回答

0

我懷疑是否有任何真正的技術原因,爲什麼對齊不能爲零(或者至少比512小得多 - 可能存在小於4,8或16的問題,因爲數據對齊如果編譯器生成的代碼依賴於整個部分太小,那麼最終可能會出錯,但我也希望這個特性能夠解決某些特定的用例,並且在大多數情況下,不需要使用這個選項我可以說,我從來沒有用它自己。

然而,使用4096將作出很大的意義,因爲這意味着一個部分不與其他部分共用一個頁面。

我也懷疑Ť帽子/文件對齊:0意味着「默認對齊」。

我還要聽從評論:

大部分開發商並不需要使用此選項

+2

請注意,filealign與內存中的佈局無關,它與文件內佈局有關。它很少有512以外的值。出於您概述的原因,內存中佈局的最小對齊爲4k。 – avakar