为什么64位程序文件大于32位?

时间:2012-01-20 08:12:38

标签: compiler-construction operating-system executable 32bit-64bit

64位编译文件约。比32位可执行文件大20%。我认为64位操作系统与32位操作系统相同。感谢上帝,这个比例不是50%。 20%真的有必要吗? 64位程序是否消耗更多RAM? 128比特会大得多吗?

增加: 我知道32位字对比64位字。 char'A'在32位模式下需要4个字节,在内存中需要64位8字节。可执行文件是否包含大量对齐/填充的常量,因此它在64位形式中更大?恕我直言64位exe& amp; 32位exe是指令代码 - 我认为它们不会过多地夸大文件大小 - 静态数据&内存地址。如果是这样,exe包含的静态数据比我想象的要多得多。它有点像PNG8和PNG24。或者我完全错了。

2 个答案:

答案 0 :(得分:6)

取决于ISA(英特尔,ARM,无论如何),各种指令需要字对齐(这可能会导致它们占用更多空间),并且数字常量需要与处理器的字大小相匹配。二进制代码充满了int常量:你的循环从零开始等等。简而言之,额外空间的可能原因是int填充和常量数据的字对齐。

根据编译方式的不同,64位代码可能会占用更多内存。数据结构也希望字对齐以便快速访问,编译器可以选择填充结构。此外,根据编译器,一些int常量可能会更改大小。 (这就是为什么你总是看到像uint32那样的typdefs:保证大小。)

最后但并非最不重要的是,指针占用了两倍的内存。

答案 1 :(得分:2)

编写64位程序的一个原因是能够使用更多RAM。这需要在32位程序中使用8个字节作为地址而不是4个字节。这可能会增加程序的大小。

另一方面,如果您的程序处理本质上为64位的数据,则可以在单个指令中执行该操作,其中32位程序将使用两个指令。这将使程序更小更快。

char'A'在任何一种情况下都使用单个字节,因此无关紧要。