首页 > 后端开发 > C++ > 在 64 位 Windows 上,'long”真的是 64 位吗?

在 64 位 Windows 上,'long”真的是 64 位吗?

DDD
发布: 2024-12-28 20:50:18
原创
957 人浏览过

Is `long` Really 64-Bits on 64-Bit Windows?

64 位 Windows 上 Long 的位大小:仔细观察

64 位 Windows 上 long 的大小问题有引发了一些混乱。虽然文档表明在这种环境下 long 确实是 64 位,但实际情况更加微妙。

在 Unix 系统领域,64 位平台上的整数和指针大小有多种安排,主要是 ILP64和 LP64。然而,微软对 LLP64 的做法有所不同。

ILP64 与 LP64

Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64

所有现代 64 位 Unix 系统都使用 LP64,其中 long 是 64 位。 MacOS X 和 Linux 就属于这一类。

LLP64 和 64 位 Windows

Microsoft 的 LLP64 方案优先重新编译 32 位软件而不进行修改。因此,在 64 位 Windows 系统上:

  • long 和 int 的大小仍为 32 位
  • 为 64 位整数引入了新数据类型

平台中立代码

至实现平台中立的代码,建议使用 C99 中的类型标头,其中提供:

  • int8_t 到 int64_t(用于有符号整数)
  • uintptr_t(用于无符号整数,用于存储指针)
  • intmax_t(用于平台上最大整数大小)

通过在代码中使用这些类型,您可以编写与不同平台上的特定整数大小无关的应用程序。

结论

虽然 long 在 Unix 系统上通常为 64 位,但在 64 位 Windows 上,它由于 Microsoft 的 LLP64 方法,仍然是 32 位。通过了解不同的整数大小约定并使用平台中立类型,开发人员可以创建跨各种系统兼容的代码。

以上是在 64 位 Windows 上,'long”真的是 64 位吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板