Каким должен быть 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 бит.