我知道 32 位程序的 RAM 限制为 4GB,因为它们的指针是 32 位的。但为什么即使在 64 位系统中它们的指针也是 32 位长的?为什么指针不能以 long 数据类型(例如 unsigned int)存储内存地址?
答案1
您这里有几个问题:
为什么 C 指针不是长整型:因为 long 实际上是两个内存位置或多或少粘在一起的。现在你的指针实际上是两个指针,除了浪费更多宝贵的工作内存之外,处理起来也更加复杂。这或多或少是向旧的 8 位和 16 位计算机添加更多内存支持的方式。这在某些特殊情况下使用,例如在旧的 32 位版本的 Windows Server 上。
为什么 64 位系统上的 32 位应用程序没有“升级”为 64 位:因为虽然它可能适用于小型、简单的程序,但它很可能会破坏自定义数据结构和程序员设置的各种黑客攻击。从技术上讲,获取二进制文件并将其“重新编译”为 64 位是可行的,但由于各种原因,它完美运行的几率非常低。我们实际上不会这样做,因为应用程序的设计最大容量肯定是 4GB,所以当时的程序员应该为此做好准备。
这是一个非常复杂的架构问题,我不得不简化很多事情。最好把它保留为“因为它就是这样工作的”