c++ - 谁决定任何数据类型或结构的大小(取决于 32 位或 64 位)?

标签 c++ c linux compiler-construction operating-system

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

我还读到 sizeof(int) 在使用 32 位和 64 位 compiler 编译时是 4 个字节。 p>

假设我的 CPU 可以同时运行 32 位和 64 位应用程序,谁将在决定数据大小编译器或处理器中起主要作用?

最佳答案

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

我认为这样做的部分原因是为了增加对在 32 位机器最常见并且期望 int 为 32 位且不再是 32 位时编写的程序的可移植性。 (也可能是,作为用户 user3386109 points out,首选 32 位数据,因为它占用的空间更少,因此可以更快地访问。)

因此,如果您想确保获得 64 位整数,请使用 int64_t 而不是 int 来声明您的变量。如果你知道你的值适合 32 位或者你不关心大小,你可以使用 int 让编译器选择最有效的表示。

至于struct等其他数据类型,则是由int等基本类型组成。

关于c++ - 谁决定任何数据类型或结构的大小(取决于 32 位或 64 位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921141/

相关文章:

linux - Linux 接入点客户端之间的流量

linux - 防止在 Redhat 7 中停止 auditd 服务

Linux (Raspbian) 自动启动脚本

c++ - 如何使用 C++ 在 LUA 中编写具有对话和菜单的交互式 NPC 脚本?

c++ - 英特尔 PIN :Initial Set up of Intel PIN tool

c++ - 使用 std::strings 而不是 char 数组的 WinAPI 文件输入/输出?

c - 将新项目添加到列表

c |比较字符串格式

c - 什么是覆盖数据?

c++ - 从函数 C++/SFML 加载资源时出现问题