Каким должен быть sizeof(int) на 64-разрядной машине? [дубликат]
Возможные Дубликаты:
размер int, long, etc
зависит ли размер 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 bytesn", (int) sizeof(int));
return 0;
}
если я использую 16-
,32-
и 64-
бит машины, то это не значит, что размер integer
и 16-
,32-
и 64-
бит соответственно?
в моей машине, я нашел WORD_BIT
и 32
. Разве это не должно быть 64
на 64-bit
машины?
$ getconf WORD_BIT
32
$
, а не sizeof(int)
быть 64-bits
(8 bytes
) в приведенном выше случае?
4 ответа:
не обязательно; "64-разрядная машина" может означать много вещей, но обычно означает, что процессор имеет регистры такого размера. Размер типа определяется компилятором, который не должен иметь ничего общего с фактическим оборудованием (хотя обычно это так); на самом деле разные компиляторы на одной машине могут иметь разные значения для них.
размер указателя должен быть 8 байт на любом 64-разрядном компиляторе C / C++, но не обязательно размер int.
не совсем так. для обратной совместимости это 32 бита.
Если вы хотите, 64 бит у вас естьlong
,size_t
илиint64_t
в C++, размер
int
Не указано явно. Он просто говорит вам, что он должен быть по крайней мере размеромshort int
, который должен быть не меньше, чемsigned char
. Размерchar
в битах также не указывается явно, хотя sizeof (char) определяется как 1. Если вы хотите 64-разрядный int, C++11 указываетlong long
быть по крайней мере 64 бит.