爲什麼PE文件中的段之間有對齊?由於節的確切大小可以在IMAGE_SECTION_HEADER.SizeOfRawData中指定,所以我沒有看到在節之間使用這些「間隙」的任何感覺。PE文件段對齊
在鍵/文件對齊的MSDN文檔中寫有:「有效值爲512,1024,2048,4096和8192」。編譯器禁止/ filealign:0是否有某些原因?
爲什麼PE文件中的段之間有對齊?由於節的確切大小可以在IMAGE_SECTION_HEADER.SizeOfRawData中指定,所以我沒有看到在節之間使用這些「間隙」的任何感覺。PE文件段對齊
在鍵/文件對齊的MSDN文檔中寫有:「有效值爲512,1024,2048,4096和8192」。編譯器禁止/ filealign:0是否有某些原因?
我懷疑是否有任何真正的技術原因,爲什麼對齊不能爲零(或者至少比512小得多 - 可能存在小於4,8或16的問題,因爲數據對齊如果編譯器生成的代碼依賴於整個部分太小,那麼最終可能會出錯,但我也希望這個特性能夠解決某些特定的用例,並且在大多數情況下,不需要使用這個選項我可以說,我從來沒有用它自己。
然而,使用4096將作出很大的意義,因爲這意味着一個部分不與其他部分共用一個頁面。
我也懷疑Ť帽子/文件對齊:0意味着「默認對齊」。
我還要聽從評論:
大部分開發商並不需要使用此選項
請注意,filealign與內存中的佈局無關,它與文件內佈局有關。它很少有512以外的值。出於您概述的原因,內存中佈局的最小對齊爲4k。 – avakar
馬特Pietrek在下面的文章中指出,在RAM,一個部分必須在對齊頁面邊界(在x86架構上是4096字節)。部分對齊在PE文件中沒有這個約束,所以它可以更短。
要檢查您的架構的頁面大小,維基百科的文章可能會有所幫助。 http://en.wikipedia.org/wiki/Page_(computer_memory)
馬特·皮特里克文章: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx
不知怎的,我覺得這是最優化的慢得多的磁盤的神器 - 像軟盤。 512是典型的扇區大小。尋找和讀取會將特定部分的第一個字節放在緩衝區的第一個字節。 –
嗯,我實際上可以使用/ filealign:[數字低於512]編譯我的源代碼,但是當我嘗試運行該PE文件時,它總是以錯誤結尾。 – Peter
我確實覺得這是一個XY問題。你究竟想要解決什麼問題(或者你只是好奇)? –