Подтвердить что ты не робот

Каким должен быть sizeof (int) на 64-битной машине?

Возможный дубликат:
размер 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
$ 

Когда я запустил следующую программу, я получил sizeof(int) как 4-bytes.

#include <stdio.h>

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

    return 0;
}

Если я запускаю разрядную машину 16-, 32- и 64-, то разве это не означает, что размер integer равен 16-, 32- и 64- бит соответственно?

В моей машине я нашел WORD_BIT is 32. Разве это не должно быть 64 на машине 64-bit?

$ getconf WORD_BIT
32
$ 

И не должен ли sizeof(int) быть 64-bits (8 bytes) в приведенном выше случае?

4b9b3361

Ответ 1

Не должно быть; "64-разрядная машина" может означать много вещей, но, как правило, это означает, что центральный процессор имеет такие большие регистры. Размер типа определяется компилятором, который не должен иметь ничего общего с реальным оборудованием (хотя это обычно происходит); на самом деле разные компиляторы на одной машине могут иметь для них разные значения.

Ответ 2

Размер указателя должен быть 8 байт на любом 64-битном компиляторе C/С++, но необязательно размер int.

Ответ 3

Не совсем. для обратной совместимости - 32 бит.
Если вы хотите иметь 64 бита, у вас есть long, size_t или int64_t

Ответ 4

В С++ размер int не указан явно. Он просто говорит вам, что он должен быть как минимум размером short int, который должен быть как минимум равным signed char. Размер char в битах также не указан явно, хотя sizeof (char) определяется как 1. Если вы хотите 64-битный int, С++ 11 указывает long long как минимум на 64 бита.