在64位计算机上应该是sizeof(int)应该是什么?

San*_*raj 65 c c++ sizeof

可能重复:
int,long等
的大小int的大小是否取决于编译器和/或处理器?
什么决定整数的大小?

我正在使用一64-bit台机器.

$ uname -m
x86_64
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
$ 
Run Code Online (Sandbox Code Playgroud)

当我运行以下程序时,我得到了sizeof(int)as 4-bytes.

#include <stdio.h>

int main(void)
{
    printf("sizeof(int) = %d bytes\n", (int) sizeof(int));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行一个16-,32-64-位机,那么不就意味着一个大小integer16-,32-64-分别位?

在我的机器上,我找到了WORD_BITIS 32.它不应该6464-bit机器上吗?

$ getconf WORD_BIT
32
$ 
Run Code Online (Sandbox Code Playgroud)

并且,在上述情况下不应该是sizeof(int)be 64-bits(8 bytes)吗?

Eug*_*ene 61

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

  • 这是一个重要的观察.32位架构上的指针是32位宽,这意味着它们无法处理超过4GB的内存. (9认同)
  • @XTF 是的,**x32** 是真实存在的:适用于 64 位 CPU 的架构,但具有 32 位指针、`int`s 和 `long`s:https://wiki.debian。组织/X32端口 (2认同)

Sco*_*ter 47

不一定; "64位机器"可能意味着很多东西,但通常意味着CPU的寄存器很大.类型的大小由编译器确定,编译器不必与实际硬件有任何关系(尽管通常如此); 实际上,同一台机器上的不同编译器可以具有不同的值.


Dan*_*ani 24

并不是的.为了向后兼容,它是32位.
如果你想要64位long,size_t或者int64_t

  • `long`在Windows 64上是4个字节. (14认同)
  • @Dani 64位Windows有什么异常?Linux和Windows选择为其64位实现实现不同的[数据模型](https://en.wikipedia.org/wiki/64-bit#64-bit_data_models),不会使另一个更正常. (11认同)
  • 这不准确.在这两者中,Linux具有*选择*的模型.Windows的模型由后向兼容性决定,可能会回到Windows 3,如果不是更多的话. (11认同)
  • @Kaz:虽然Windows 98/XP程序的大部分内容都不能在Windows 7下运行(我们甚至不会想到Windows 8)没有兼容性攻击,即使这样,有些人也不会.就此而言,向后兼容16位Windows确实是一个笑话.没有_real_原因.如果你问我(因为大多数它无论如何都不能正常工作),他们应该扔掉任何比Win 7更高的门槛.唉,那没发生:( (5认同)
  • @Prætorian:`long`仍然是32位的事实. (2认同)

jua*_*nza 9

在C++中,int未明确指定大小.它只是告诉你它必须至少是大小short int,它必须至少与大小一样大signed char.char尽管sizeof(char)定义为1,但也没有显式指定in位的大小.如果你想要64位int,C++ 11指定long long至少为64位.