wal*_*wal 7 64-bit x86 x86-64 cpu-architecture
从过去的读数来看,大多数 32位驱动程序似乎无法在64位上运行.
在纯粹的概念层面,我看到一个64位的机器有额外的"房间"使用32个驱动程序时,所以我试图确定为什么最经常,他们将无法正常工作.(我来自用户空间)
我已经阅读了x86-64上的这篇 wiki文章
堆栈上的推送和弹出总是以8字节的步幅进行,指针的宽度为8字节.
我可以看到这可能是一个32位驱动程序可能在64位上失败的原因,因为它发出一个pop(),弹出的数据是驱动程序预期的两倍.
我刚刚提到的可能是完全不合适的,因为我是一个用户空间的人,在这种情况下,或者其他什么是一些实际的例子(代码或外行解释)为什么32位驱动程序在64位运行时失败?
简而言之,您不能在32位指针中存储64位地址.因此,如果您的代码涉及将指针来回传递给操作系统,就像设备驱动程序通常那样,它就不会很好地结束.
驱动程序通常是在物理设备(例如,磁盘)和内存之间移动数据.将要求驱动程序将X磁盘扇区转移到地址为Y的存储器中.
在64位操作系统上,Y将是64位地址,因此您的32位驱动程序无法处理此问题.当然还有一个问题,即传递的指针大小是它预期的两倍,所以如果DID运行它可能会记录错误的内存......