Каким должен быть 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
) в приведенном выше случае?
Ответы
Ответ 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 бита.