int 的大小是如何决定的?
int 的大小是否真的取决于处理器。对于 32 位机器,它将是 32 位,对于 16 位,它是 16。
在我的机器上它显示为 32 位,尽管该机器安装了 64 位处理器和 64 位 Ubuntu。
int 的大小是如何决定的?
int 的大小是否真的取决于处理器。对于 32 位机器,它将是 32 位,对于 16 位,它是 16。
在我的机器上它显示为 32 位,尽管该机器安装了 64 位处理器和 64 位 Ubuntu。
这取决于实施。C标准唯一保证的是
sizeof(char) == 1
和
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
以及类型的一些可表示的最小值,这意味着char
至少 8 位长,int
至少 16 位等。
所以它必须由实现(编译器,操作系统,......)决定并记录在案。
这取决于编译器。
例如:尝试使用旧的 turbo C 编译器,它会为 int 提供 16 位的大小,因为在编写编译器时字长(处理器可以轻松解决的大小)为 16。
整数的大小基本上取决于architecture
您的系统。一般来说,如果你有一16-bit
台机器,那么你的compiler
意志必须支持 intsize 2 byte.
如果你的系统是 32 位的,那么编译器必须支持 4 字节的整数。
更详细地说,
data bus
是的,16 位,32 位的概念size of data bus
在您的系统中只意味着什么。x06->16-bit->DOS->turbo c->size of int->2 byte x306->32-bit>windows/Linux->GCC->size of int->4 byte
它取决于主编译器。如果您使用 turbo c 表示整数大小为 2 个字节。否则,您使用的是 GNU gccompiler 意味着整数大小为 4 个字节。它仅取决于 C 编译器中的实现。
尽可能int
宽不是最好的选择。(选择由ABI设计人员做出。)
像 x86-64 这样的 64 位架构可以int64_t
在long
. (Microsoftlong
在其 x86-64 ABI 中保留 32 位,出于各种可移植性原因,考虑到现有的代码库和 API,这很有意义。这基本上是无关紧要的,因为应该使用真正关心类型大小的可移植代码,而int32_t
不是int64_t
对. )int
long
在许多情况下,拥有实际上可以生成更好、更高效的代码int
。每个元素仅使用 4B 的数组int32_t
只有. 此外,特定于 x86-64,32 位操作数大小是默认值,因此 64 位指令需要一个额外的代码字节作为 REX 前缀。因此,32 位(或 8 位)整数的代码密度比 16 位或 64 位的要好。(有关文档/指南/学习资源的链接,请参阅x86 wiki。)int
int64_t
如果程序需要 64 位整数类型才能正确操作,则不会使用int
. (将指针存储在 anint
而不是 anintptr_t
是一个错误,我们不应该让 ABI 变得更糟以适应这样的损坏代码。)编写程序的程序员int
可能期望使用 32 位类型,因为大多数平台都是这样工作的。(标准当然只保证16bits)。
由于一般不期望int
64 位(例如在 32 位平台上),并且将其设为 64 位会使某些程序变慢(几乎没有程序更快),int
因此在大多数 64 位 ABI 中是 32 位。
此外,需要有一个 32 位整数类型的名称,forint32_t
是一个typedef
for。
是的。 int
大小取决于编译器大小。对于 16 位整数,整数范围在 -32768 到 32767 之间。对于 32 位和 64 位编译器,它会增加。