谁决定任何数据类型或 struct 的大小(取决于32位或64位)?编译器还是处理器?例如,对于32位系统,sizeof(int)是4字节,而对于64位系统,sizeof(int)是8字节.

I also read that sizeof(int) is 4 bytes when compiled using both 32-bit and 64-bit compiler.

Suppose my CPU can run both 32-bit as well as 64-bit applications, who will play main role in deciding size of data the compiler or the processor?

推荐答案

它最终是编译器.编译器实现者可以决定模拟他们认为合适的任何整数大小,而不管CPU最有效地处理什么.也就是说,C(和C++)标准的编写方式使得编译器实现者可以自由 Select 最快、最有效的方式.对于许多编译器来说,实现者 Select 将int保持为32位,尽管CPU本机处理64位int非常有效.

我认为这样做的部分原因是为了提高程序的可移植性,这些程序是在32位机器最常见的时候编写的,他们希望int是32位的,不再是了.(作为用户user3386109 points out,32位数据可能更受欢迎,因为它占用的空间更少,因此访问速度更快.)

因此,如果您想确保获得64位整数,可以使用int64_t而不是int来声明变量.如果您知道您的值将适合32位以内,或者您不关心大小,那么可以使用int让编译器 Select 最有效的表示形式.

至于其他数据类型,比如struct,它们是由基本类型(比如int)组成的

Linux相关问答推荐

如何将netcdf文件列表中的特定变量添加到不同的文件中?

在 bash 脚本中保持两个进程处于活动状态(并在死亡时重生它们)

无法放弃所有权限,但可以放弃 CAP_SETUID 权限.

8 个半小时范围的 Crontab 表达式

Linux 系统调用文档

try 使用 patchelf 修补 MuJoCo 二进制文件时出现执行格式错误

如何使用 sed debug调试正则表达式?

仅显示 tcsh 或 bash 中作为符号链接的文件和文件夹

Linux 上的 C++ 开发 - 我从哪里开始?

yum 可以告诉我哪些存储库提供了特定的包吗?

如何下载较旧的 google play 服务?

比较linux中两个未排序的列表,列出第二个文件中的唯一性

Mac OS X 中的 ldconfig 等效项?

如何更改 tmux 会话的起始目录?

.NET Core 中的跨平台文件名处理

如何在 Linux 中查看日志(log)文件并在查看时应用自定义过滤器?

卸载从源代码构建的python?

如何使用mv命令移动特定目录中的文件除外?

如何通过命令行识别特定的 Linux 风格?

如何计算一个单词在目录的所有文件中出现的次数?