编辑:刚刚发现(感谢 Ben Voigt 迅速指出)这个提议甚至是不可能的。对于后代来说,这是一个基本问题,而不是我之前对 AMD 扩展的误解:
我一直想知道 32 位构建(尤其是 Windows)软件是否常见检测 64 位处理器的存在并利用 64 位操作数和更大的寄存器文件(如果存在)。这是假设 32 位进程实际上可以使用 64 位指令,其方式与 i386 上的 16 位进程在物理上存在这样的 CPU 时可以使用 32 位指令的方式大致相同,通过编码覆盖前缀。但是,正如下面的答案所指出的那样,这是不可能的。
为什么要使用 64 位指令而不使用 32 位寻址?
好吧,假设您知道您正在处理的数据集足够小以适合该地址空间。例如,您使用了 64 位版本的程序,而对于您使用它的目的,性能监控会告诉您该进程正在使用 2GB 或更少。(实际上,根据this,设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE 标志的 32 位进程将在 64 位 Windows 中获得 4GB 用户空间。)
有些人会认为这无关紧要,但实际上,它可能。在 64 位版本中,如果我没记错的话,程序存储的每个指针都会消耗两倍的物理 RAM! 如果程序使用大量指针(例如,由于链表或哈希表),这可能会累加并降低缓存效率等。
不幸的是,正如下面 Ben Voigt 的回答所指出的,在 Windows 中根本不可能,而在 Linux 中已经完成了专门用于此目的的模式。