c语言中,为啥在64位系统中long跟指针的大小是8,而32位的却是4?是啥导致不一样?求详细解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中,为啥在64位系统中long跟指针的大小是8,而32位的却是4?是啥导致不一样?求详细解答相关的知识,希望对你有一定的参考价值。

既然long 跟 指针的大小 不一样勒。
那为什么 int,long long 在32或者64位 还是一样呢?

64位系统,这个位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,所以sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8
32位系统,同理,他的一个地址占32位二进制空间,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4
其实明白了两个系统的寻址原理就能明白,大体就是这个原因。

地址跟系统有关,但是基本数据类型占的大小是由C语言本身决定。
参考技术A 当然是不同平台的C语言编译器导致不同。 参考技术B 如果你学习过汇编,你就能够理解了。

在32位的系统中,运算器一次最多可以处理32位的数据,寄存器的最大宽度也是32位的。然后, C语言中对数据宽度的规定是指针变量、long型变量的宽度推荐是处理器一次能够处理的最大宽度,所以就是32位,也就是4个字节。

同理,在64位系统中,运算器、寄存器等一次处理的宽度是64位,也就是8个字节,所以指针变量、long型变量等也就都是8个字节了。
参考技术C 64位win7,VS2010控制台程序中
sizeof(long*) 是4而不是8。
应该和编译器的定义有关。
参考技术D 根据地址数据总线来定的

32位和64位系统,C语言中char,short,int,long,char*,int*,int**各占多少字节

1、在32位系统中:

char(1)字节

short(2)字节

int(2)字节

long(4)字节

char*(4)字节

int*(4)字节

int**(4)字节

2、在64位系统中:

char(1)字节

short(2)字节

int(4)字节

long(8)字节

char*(4)字节

int*(4)字节

int**(4)字节

扩展资料

在C++中short占2字节,int、float、long都占4字节,double占8字节。

指针长度和地址总线有关。因为指针记录的就是一个地址,那么32位的就是4字节,64位的就是8字节。

char占1字节,short占2字节,int、float、long都占4字节,double占8字节,任意类型的指针都占4个字节。

参考技术A TC中char(1),short(2),int(2),long(4),char*(4),int*(4),int**(4)
VC中char(1),short(2),int(4),long(8),char*(4),int*(4),int**(4)
跟操作系统没有关系,跟使用的编译器有关
参考技术B 这个和编译器有关。不同的编译器不一样。追问

我只想知道确切的答案

以上是关于c语言中,为啥在64位系统中long跟指针的大小是8,而32位的却是4?是啥导致不一样?求详细解答的主要内容,如果未能解决你的问题,请参考以下文章

C语言错题总结

C语言错题总结

64位系统与32位系统区别

请教c语言中打印变量的大小被警告是为啥(VS2019/Debug/x64)?

写一个c程序辨别系统是16位or32位

C语言中long类型指针类型长度到底是多少