我之前读过几次,C 中数据类型的长度取决于 PC 上的体系结构。
但最近我阅读了编译器的文档,该文档指定了您可以访问的数据类型以及该数据类型的长度。
所以我的问题是,数据类型长度取决于您使用的编译器、计算机的体系结构或两者?
每种类型的大小的最终确定取决于C实现,并受到C标准的约束。(该标准指定了诸如char
一个 \xe2\x80\x9cbyte、\xe2\x80\x9d 和一个字节是八位或更多位之类的内容,并且某些类型彼此大小相同。)
AC 实现通常由编译器、头文件、库、链接器和要运行的目标系统以及可能的其他组件组成。编译器对类型的特征有很大的影响,尤其是C的核心类型,但有时头文件完成类型的定义,因此一个编译器可能会与提供不同类型的不同组头文件一起使用。
\n大多数 C 实现都会受到其设计执行架构特征的影响。Anint
通常与通用处理器寄存器的大小相同,并且指针(任何类型)通常是最小的大小,它是字节数的二次方并且具有足够的位来跨越目标的地址空间建筑学。
然而,C 实现可能被设计用于其他目的。我见过一个 C 实现,它在 64 位体系结构中使用 32 位指针大小,目的是减少具有大量指针的程序中的内存使用量。AC 实现也可以设计为在新处理器上运行旧的 C 代码,因此 C 实现使用旧代码编写的类型的大小,而不是更 \xe2\x80\x9cnatural\xe2\x80\ 的大小新处理器上的 x9d。
\n