C int变量的大小
int的大小是如何决定的 int的大小取决于处理器,这是真的吗。对于32位机器,它将是32位,对于16位,它是16位C int变量的大小,c,int,32bit-64bit,processor,x86,C,Int,32bit 64bit,Processor,X86,int的大小是如何决定的 int的大小取决于处理器,这是真的吗。对于32位机器,它将是32位,对于16位,它是16位 在我的机器上,它显示为32位,尽管机器上安装了64位处理器和64位Ubuntu。这取决于编译器 例如:尝试一个旧的turboc编译器&它会给出int的16位大小,因为在编写编译器时,字的大小(处理器可以用最少的努力处理的大小)是16。这取决于实现。C标准唯一能保证的是 sizeof(char) == 1 及 sizeof(char)它取决于主编译器。 如果使用turbo c,则
在我的机器上,它显示为32位,尽管机器上安装了64位处理器和64位Ubuntu。这取决于编译器
例如:尝试一个旧的turboc编译器&它会给出int的16位大小,因为在编写编译器时,字的大小(处理器可以用最少的努力处理的大小)是16。这取决于实现。C标准唯一能保证的是
sizeof(char) == 1
及
sizeof(char)它取决于主编译器。
如果使用turbo c,则表示整数大小为2字节。
否则,您使用的GNU编译器意味着整数大小为4字节。
它只取决于C编译器中的实现。整数的大小基本上取决于系统的体系结构。
通常,如果您有一台16位
机器,那么您的编译器将必须支持大小为2字节的整数。
如果您的系统是32位的,那么编译器必须支持4字节的整数
更详细地说,
数据总线
的概念出现在图中是的,16位、32位仅表示系统中数据总线的大小
- 数据总线的大小是确定整数大小所必需的,因为数据总线的目的是向处理器提供数据。它在一次提取时可以向处理器提供的最大值很重要,编译器首选此最大值,以便在每次提取时提供数据
- 根据系统的数据总线大小,编译器
设计用于提供数据总线的最大大小作为整数的大小
对<代码>整数
大小取决于编译器大小。
对于16位整数,整数的范围在-32768到32767之间。对于32和64位编译器,它将增加。使int
尽可能宽并不是最佳选择。(由设计师选择。)
像x86-64这样的64位体系结构可以有效地在int64\t
上运行,因此long
自然是64位的。(微软在x86-64 ABI中将long
保留为32位,因为考虑到现有的代码库和API,各种可移植性原因都是有意义的。这基本上是不相关的,因为实际上关心类型大小的可移植代码应该使用int32\t
和int64\t
,而不是对int进行假设代码>和长
)
在许多情况下,拥有int
beint32\t
实际上可以获得更好、更高效的代码。int
数组的每个元素仅使用4B,其缓存占用空间仅为int64\t
数组的一半。此外,特定于x86-64,32位操作数大小是默认值,因此64位指令需要一个额外的代码字节作为REX前缀。因此,使用32位(或8位)整数比使用16位或64位整数的代码密度更好。(有关文档/指南/学习资源的链接,请参见wiki。)
如果程序需要64位整数类型才能正确运行,则不会使用int
。(将指针存储在int
而不是intptr\t
中是一个bug,我们不应该让ABI更糟糕,以适应这样的坏代码。)编写int
的程序员可能希望使用32位类型,因为大多数平台都是这样工作的。(当然,标准只保证16位)
由于不期望int
通常为64位(例如在32位平台上),将其设置为64位会使一些程序变慢(几乎没有程序变快),int
在大多数64位ABI中为32位。
此外,32位整数类型需要有一个名称,int32_t
才能成为typedef
的名称。这还取决于编译器,因为C并没有说明int的确切大小。的可能重复是(非常)迂腐的;对于sizeof int
,它将给出2
,一个字节中有CHAR\u位
位sizeof
返回字节数,一个字节中不必有8位。我遇到一个编译器,它的short-long
int
是16位,而short-long
是24位。@detly该编译器的创建者当然有幽默感。是的,double
的大小被称为“24或32”。这是一个微处理器。这些保证是不完整的。还必须是CHAR\u位
至少为8,sizeof(int)*CHAR\u位
必须至少为16,等等。严格来说,标准对整数类型的范围提出了要求,而不是其大小。在存在填充位的情况下,如果int
的填充位多于long
,则可能具有sizeof(long)
。(这样的实现不太可能。)thanx关于信息,64位>Linux上的内容…在64位系统中,数据总线的大小为64位,编译器也显示了4字节测试概念是,在64位计算机中,编译器最多支持8字节数据,但这并不意味着它不能支持4字节。简单地说,较低的系统可以与较高的系统兼容,因此,系统是64位的,但编译器最多支持32位。因此,它显示为4字节,请检查最新的编译器版本。
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
x06->16-bit->DOS->turbo c->size of int->2 byte
x306->32-bit>windows/Linux->GCC->size of int->4 byte