#include<stdio.h>
int main()
{
int c;
return 0;
} // on Intel architecture
#include <stdio.h>
int main()
{
int c;
return 0;
}// on AMD architecture
/* 这里我在两台不同的机器上有一个代码,我想知道'数据类型的大小是否取决于机器' */
#include<stdio.h>
int main()
{
int c;
return 0;
} // on Intel architecture
#include <stdio.h>
int main()
{
int c;
return 0;
}// on AMD architecture
/* 这里我在两台不同的机器上有一个代码,我想知道'数据类型的大小是否取决于机器' */
请参见此处: C 和 C++ 中整数/算术类型的大小保证
基本的 C 类型大小取决于实现(编译器)和体系结构,但是它们有一些保证的边界。因此,永远不应该对类型大小进行硬编码,而是使用 sizeof(TYPENAME) 来获取它们的字节长度。
快速回答:是的,大多数情况下,但是......
C 中类型的大小取决于编译器编写者的决定,并符合标准的要求。
编译器编写者的决定往往受到 CPU 架构的强烈影响。例如,C 标准说:
“普通” int对象具有执行环境架构所建议的自然大小。
尽管这留下了很大的判断空间。
此类决定还可能受到其他考虑因素的影响,例如与来自同一供应商的其他架构的编译器的兼容性以及为每种支持的大小提供类型的便利性。例如,在 64 位系统上,明显的“自然大小”int
是 64 位,但许多编译器仍然具有 32 位int
。(对于 8-bitchar
和 64-bit int
,short
可能是 16 位或 32 位,并且您不能拥有涵盖这两种大小的基本整数类型。)
(C99 引入了“扩展整数类型”,它可以解决覆盖所有支持大小的问题,但我不知道有任何编译器实现了它们。)
出于性能原因,它通常会这样做。char
C 标准定义了所有类型(如、short
、int
、long
)long long
及其无符号对应物的最小值范围。
但是,英特尔和 AMD 的 x86 CPU 与大多数 x86 编译器的硬件基本相同。至少,它们向程序员公开了相同的寄存器和指令,并且它们中的大多数操作相同(如果我们考虑官方定义和记录的内容)。
无论如何,编译器或其开发人员可以使用任何其他大小,不一定要匹配目标硬件上的自然操作数大小,只要该大小符合 C 标准。
是的。基本数据类型的大小取决于底层 CPU 架构。ISO C(和 C++)只保证数据类型的最小尺寸。
但是对于同一 CPU,编译器供应商之间的情况并不一致。考虑到有用于 Intel x386 CPU 的具有 32 位长整数的编译器,以及为您提供 64 位长整数的其他编译器。
并且不要忘记 MS 程序员在 Intel 286 机器时代不得不处理的十年左右的痛苦,编译器强加给我们的所有不同的“内存模型”。16 位指针与 32 位分段指针。我很高兴那些日子一去不复返了。