64位计算机上int和sizeof int指针的大小

Itz*_*984 27 c c++ int 64-bit sizeof

我只是想知道我怎么知道我的笔记本电脑是64位还是32位机器.(这是64).

所以,我考虑过打印以下内容:

int main()
{
 printf("%d",sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)

结果是4,这看起来很奇怪(因为它是64位机器)

但是,当我打印这个:

int main()
{
 printf("%d",sizeof(int*));
}
Run Code Online (Sandbox Code Playgroud)

结果是8,这更有意义.

问题是:

由于我使用的是64位机器,因此int等原始类型不应该使用8个字节

(64位)和那个sizeof int应该是8?为什么不是这样?

为什么int*大小是8?

这里有点困惑,

所以,提前谢谢.

Sca*_*nth 25

不,sizeof(int)是实现定义的,通常是4个字节.

另一方面,为了处理超过4GB的内存(32位系统可以执行),您需要指针为8字节宽.int*只是将地址保存到"内存中的某个地方",并且只能使用32位来处理超过4GB的内存.

  • 注意:代码,常量数据,堆栈,动态数据,各种数据类型等的内存可能存在于单独的隐含_segments_或地址空间中,因此每个地址可以是32位,_each_有4GB.总共超过4GB.此模型意味着函数地址和数据地址具有相同的"值",但由于其隐含的段不同,因此会进行不同的比较.考虑受各种嵌入式处理器欢迎的[哈佛架构](https://en.wikipedia.org/wiki/Harvard_architecture).C可移植到许多地址方案. (2认同)

Rah*_*thi 16

在任何64位C/C++编译器上,指针的大小应为8字节,但对于int的大小则不一样.

维基有一个很好的解释:

在64位机器上用于C和C派生语言的许多编程环境中,"int"变量仍然是32位宽,但长整数和指针是64位宽.这些被描述为具有LP64数据模型.另一个替代方案是ILP64数据模型,其中所有三种数据类型都是64位宽,甚至是SILP64,其中"短"整数也是64位宽.[引证需要]但是,在大多数情况下,所需的修改相对较小且简单,并且可以简单地为新环境重新编译许多编写良好的程序而无需更改.另一种替代方案是LLP64模型,它通过将int和long保留为32位来保持与32位代码的兼容性."LL"指的是"长整数"类型,在所有平台上至少为64位,包括32位环境.