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

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 бит.