gpt4 book ai didi

c - c中数据类型的大小

转载 作者:太空狗 更新时间:2023-10-29 15:34:08 24 4
gpt4 key购买 nike

数据类型的大小是依赖于硬件架构还是依赖于编译器?

我想知道哪些因素真正影响确定数据类型的大小?

最佳答案

编译器(更准确地说是“实现”)可以自由选择大小,但要遵守 C 标准中的限制(例如 int 必须至少为 16 位)。编译器可以选择让自己服从其他标准,比如 POSIX,它可以添加更多约束。例如,我认为 POSIX 表示所有数据指针的大小都相同,而 C 标准非常适合 sizeof(int*) != sizeof(char*)

在实践中,编译器编写者的决定受到架构的强烈影响,因为除非有充分的理由否则他们希望实现高效且可互操作。处理器制造商或操作系统供应商通常会发布一种称为“C ABI”的东西,它会告诉您(除其他外)类型有多大以及它们如何存储在内存中。编译器从来没有义务遵循其架构的标准 ABI,而且 CPU 通常有不止一个通用 ABI,但是要直接从一个编译器的代码调用另一个编译器的代码,两个编译器必须使用相同的 ABI。因此,如果您的 C 编译器不在 Windows 上使用 Windows ABI,那么您将需要额外的包装器来调用 Windows dll。如果您的编译器支持多个平台,那么它很可能在不同平台上使用不同的 ABI。

您经常会看到缩写,用于指示正​​在使用多个 ABI 中的哪一个。因此,例如,当 64 位平台上的编译器说它是 LP64 时,这意味着 long 和指针是 64 位,而省略 int 是 32 位。如果显示 ILP64,则表示 int 也是 64 位。

最后,这更像是编译器编写者从明智选项的菜单中进行选择的情况,而不是随意挑选数字。但是实现总是可以自由地做任何它喜欢做的事情。如果你想为 x86 编写一个编译器来模拟具有 9 位字节和 3 字节字的机器,那么 C 标准允许它。但就操作系统而言,您只能靠自己。

关于c - c中数据类型的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com