我们可以在32位处理器上运行的最大可执行文件大小是多少?假设我们有一个无限的硬盘。还要考虑它所依赖的所有参数。
答案 0 :(得分:3)
在实践中,这将取决于OS的限制和处理器使用的指令集架构。
但是,由于您没有提及任何特定的硬件或软件并且允许无限的磁盘空间,因此听起来您对理论上可能的内容与实际中可能发生的内容更感兴趣。理论上,限制不会超过2 ^ 32 指令(因此绝对最大文件大小将是平均指令大小的函数,这将取决于您的指令集)假设理论值为32位处理器使用32位指令指针,因为这是处理器可以处理的最大数量的不同指令。除此之外,还存在CPU无法引用或跳转的指令,因为它具有32位器件的限制。
当然,到达一个32位平台,实际上可以运行一个包含2 ^ 32指令的程序,这将是非常困难的。可寻址RAM的最大数量为4GB,并且必须在程序的可执行指令,数据和操作系统的代码和数据之间共享。所以你需要一个操作系统,它不仅可以输入/输出数据,还可以输入程序的可执行指令。这需要在程序执行时实时发生,这样如果程序尝试执行类似jmp 0x10000000
的操作并且指令'0x10000000'不在内存中,则操作系统会捕获访问尝试并提取请求指令进入一些未使用的存储器位置并在允许执行继续之前适当地更新指令指针。
当然,可执行文件可以在其中嵌入非可执行数据,因此从这个意义上讲,理论上最大可执行文件大小基本上是无限的,因为即使您已经有2 ^ 32条指令,只要你能够随时添加更多数据不要添加任何其他可执行指令,只要您的操作系统和可执行格式设计为允许任意大的数据部分。