为什么 PE 文件中的部分之间存在对齐?由于可以在 IMAGE_SECTION_HEADER.SizeOfRawData 中指定节的确切大小,我看不出在节之间使用这些“间隙”有任何意义。
在密钥 /filealign 的 MSDN 文档中写道:“有效值为 512、1024、2048、4096 和 8192”。编译器禁止 /filealign:0 有什么原因吗?
为什么 PE 文件中的部分之间存在对齐?由于可以在 IMAGE_SECTION_HEADER.SizeOfRawData 中指定节的确切大小,我看不出在节之间使用这些“间隙”有任何意义。
在密钥 /filealign 的 MSDN 文档中写道:“有效值为 512、1024、2048、4096 和 8192”。编译器禁止 /filealign:0 有什么原因吗?
以下来自 Matt Pietrek 的文章指出,在 RAM 中,一个节必须在页面边界上对齐(在 x86 架构上为 4096 字节)。节对齐在 PE 文件中没有此约束,因此可以更短。
要检查架构的页面大小,维基百科文章可能会有所帮助。 http://en.wikipedia.org/wiki/Page_(computer_memory)
Matt Pietrek 文章:http: //msdn.microsoft.com/en-us/magazine/cc301805.aspx
编译器禁止它,因为 Windows(Windows 中的 exe 加载器)禁止它。我的意思是,如果我将生成 exe,其部分对齐为 256 并且字段设置得当,Windows 将不会运行它
为什么windows禁止它我不知道..我完全同意它应该被允许让它更小(我想把它放得更小,例如64或16)
我怀疑对齐不能为零(或至少比 512 小得多的值 - 可能存在小于 4、8 或 16 的问题,因为数据对齐最终可能是如果编译器生成的代码依赖于整个部分对齐太小,则错误。但我也希望引入此功能以解决某些特定用例,并且在大多数情况下,没有必要使用此选项。我可以说我自己从未使用过它。
但是,使用 4096 会很有意义,因为这意味着一个部分不会与另一个部分共享页面。
我还怀疑 /filealign:0 表示“默认对齐”。
我也会留意评论:
大多数开发人员不需要使用此选项