C中整数或任何其他数据类型的大小是否取决于底层架构? #包括 int main() { INTC; 返回0; }//关于英特尔体系结构 #包括 int main() { INTC; 返回0; }//AMD体系结构研究

C中整数或任何其他数据类型的大小是否取决于底层架构? #包括 int main() { INTC; 返回0; }//关于英特尔体系结构 #包括 int main() { INTC; 返回0; }//AMD体系结构研究,c,architecture,types,integer,size,C,Architecture,Types,Integer,Size,/* 这里我有两台不同机器上的代码,我想知道“数据类型的大小取决于机器” */请参见此处: 基本的C类型大小取决于实现(编译器)和体系结构,但是它们有一些保证的边界。因此,人们不应该硬编码类型大小,而应该使用sizeof(TYPENAME)来获取它们的字节长度。出于性能原因,通常是这样。C标准定义了所有类型的最小值范围,如char、short、int、long、long及其无符号对应项 然而,英特尔和AMD的x86 CPU与大多数x86编译器的硬件基本相同。至少,它们将相同的寄存器和指令暴露给

/* 这里我有两台不同机器上的代码,我想知道“数据类型的大小取决于机器” */

请参见此处:


基本的C类型大小取决于实现(编译器)和体系结构,但是它们有一些保证的边界。因此,人们不应该硬编码类型大小,而应该使用sizeof(TYPENAME)来获取它们的字节长度。

出于性能原因,通常是这样。C标准定义了所有类型的最小值范围,如
char
short
int
long
long
及其无符号对应项

然而,英特尔和AMD的x86 CPU与大多数x86编译器的硬件基本相同。至少,它们将相同的寄存器和指令暴露给程序员,并且它们中的大多数操作相同(如果我们考虑什么是官方定义和文档化的)。
无论如何,编译器或其开发人员可以使用任何其他大小,只要该大小符合C标准,就不一定与目标硬件上的自然操作数大小相匹配。

快速回答:是的,大部分是这样,但是

C中类型的大小取决于编译器编写者的决定,取决于标准的要求

编译器编写者的决策往往受到CPU体系结构的强烈影响。例如,C标准规定:

“普通”int对象具有 执行环境的体系结构

尽管这给判断留下了很大的空间

这些决定还可能受到其他考虑因素的影响,例如与其他体系结构的同一供应商的编译器的兼容性,以及为每个支持的大小提供类型的便利性。例如,在64位系统上,
int
的明显“自然大小”是64位,但许多编译器仍然使用32位
int
。(对于8位
char
和64位
int
short
可能是16位或32位,并且不能同时包含两种大小的基本整数类型。)


(C99引入了“扩展整数类型”,它可以解决覆盖所有支持大小的问题,但我不知道有哪种编译器实现了它们。)

是的。基本数据类型的大小取决于底层CPU体系结构。ISO C(和C++)只保证数据类型的最小大小

但对于同一个CPU,编译器供应商之间的差异并不一致。考虑到英特尔32位CPU的32位长编译器和其他给你64位长的编译器。


别忘了在英特尔286机器时代,微软程序员们经历了十年左右的痛苦,编译器强加给我们的所有不同的“内存模型”。16位指针与32位分段指针。就我个人而言,我很高兴那些日子已经过去。

不同机器的尺寸肯定会有所不同。e、 g.
long
在Windows上是32位,在Linux上是64位。Intel和AMD不是体系结构。他们是供应商。x86是一种体系结构。@DietrichEpp:是的,它们不是。。word miss有时可能是的副本,如果您真的对可移植性感兴趣,还应该注意,在不同的平台上,字节的大小也可能不同。
#include<stdio.h>

int main()
{
  int c; 
  return 0;
} // on Intel architecture

#include <stdio.h>

int main()
{
  int c; 
  return 0;
}// on AMD architecture