从 16 位迁移到 32 位通常是一个痛苦的过程。很多细节(例如,指针对齐、类型大小、函数入口点、API 更改和库调用模型)使该迁移变得复杂且容易出错。现在,在从 32 位迁移到 64 位时,虽然该过程也需要一些更改,但更改数量远比从 16 位迁移到 32 位时所需的更改要少,而且也不像它们那样至关重要。
例如:
内存模型保持一致(基本数据类型保持一致)。
没有入口点问题。
焦点在指针和派生类型上,它们现在是 64 位。
32 位中的内存模型是 ILP32;而 64 位中是 IL32P64。该内存模型和 Unix 64 位内存模型 (I32LP64) 之间最显著的区别是,该内存模型的长整型仍然是 32 位的,而在 Unix 中是 64 位的。
API数据模型intlongpointer
Win32ILP32323232
Win64IL32P64323264
UNIXI32LP64326464
此外,有一些新类型的内存模型,它们利用诸如 INT64、LONG64 等的 64 位体系结构。但是,由于基类型保持不变,因此迁移到 64 位的过程对开发人员的代码基的影响将是很小的。这对于 Microsoft 的 64 位迁移策略而言是一个重要的考虑事项。该策略极大地简化了开发人员的迁移路径,同时既允许开发人员继续使用 64 位数据类型的扩展功能,又允许他们打破 32 位的 4GB 限制。 |