抽象数据模型

每个应用程序和每个操作系统都有一个抽象数据模型。 许多应用程序不会显式公开此数据模型,但该模型指导编写应用程序代码的方式。 在 32 位编程模型中, (称为 ILP32 模型) ,整数、长和指针数据类型的长度为 32 位。 大多数开发人员在未意识到的情况下就使用此模型。 就 Win32 API 的历史而言,这是一个有效的 (,尽管) 假设不一定安全。

在 64 位 Windows 中,这种数据类型大小奇偶校验的假设无效。 使所有数据类型的长度为 64 位会浪费空间,因为大多数应用程序不需要增加的大小。 但是,应用程序确实需要指向 64 位数据的指针,并且它们需要能够在所选情况下具有 64 位数据类型。 这些注意事项导致选择了名为 LLP64 (或 P64) 的抽象数据模型。 在 LLP64 数据模型中,只有指针扩展到 64 位;所有其他基本数据类型 (整数和长) 保持 32 位的长度。

最初,在 64 位 Windows 上运行的大多数应用程序将从 32 位 Windows 移植。 仔细编写的同一源应在 32 位和 64 位 Windows 上运行,这是一个目标。 定义数据模型并不能简化此任务。 但是,第一步是确保数据模型仅影响指针数据类型。 第二步是定义一组新数据类型,使开发人员能够自动调整其指针相关数据的大小。 这允许与指针关联的数据在指针大小从 32 位更改为 64 位时更改大小。 基本数据类型的长度为 32 位,因此磁盘上的数据大小、通过网络共享的数据或通过内存映射文件共享的数据没有变化。 这减轻了开发人员在将 32 位代码移植到 64 位 Windows 所涉及的大量工作量。

这些新数据类型已添加到 Windows API 头文件。 因此,现在可以开始使用新类型。 有关详细信息,请参阅 新数据类型