根据64位系统中的cpp引用:
LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit)
Win64 API
LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit)
Unix and Unix-like systems (Linux, Mac OS X)
那么针对Linux和Windows编写的代码如何考虑长数据类型呢?
最佳答案
- 在 C 和 C++ 中,在可移植代码中,您永远不知道
int
这样的类型的确切大小。或long int
.如果将代码移至不同的编译器(或不同的机器或不同的操作系统),某些类型的大小可能会发生变化。这不一定是个问题;事实上,如果你想让它成为一个问题,它只是一个问题。 (所有这一切一直都是如此,与某人对“LLP64”和“LP64”架构系列的定义无关。) - 在那些(希望很少见的)情况下,当你需要一个精确大小的类型时,一个好的方法是使用像
int32_t
这样的类型。和uint64_t
来自<cstdint>
(或 C 中的<stdint.h>
)。 - 但大多数情况下,您真的、真的不需要指定类型的确切大小。 (有些人说您需要指定每种类型的确切大小,但我的建议是忽略这些人。)
- 几乎唯一需要指定确切大小的情况是在尝试定义可以以“二进制”方式读写以符合某些外部强加的存储布局的结构时。但在那里,由于对齐、填充和字节顺序等问题,指定数据类型的确切大小通常是不够的。因此,您最好还是编写明确的序列化和反序列化代码(或者使用“文本”数据格式,如果可以的话)。
- 我的底线是我很少担心类型的确切大小。
关于c++ - 在为 Windows 和 Linux 编写的程序中是否有必要处理长数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36753750/