2013-12-05 2 views
-2

Если я запускаю следующие программы на двух одинаковых 64-битных машинах отдельно, а затем сравниваю их весь байт по байтам, какую разницу я увижу?В чем разница между двумя разными типами с одинаковым размером в C?

int main(int argc, char *argv[]) 
{ 
    unsigned int x=1; 
    getc(stdin); 
    return 0; 
} 

int main(int argc, char *argv[]) 
{ 
    unsigned long x=1; 
    getc(stdin); 
    return 0; 
} 

если два х не просто тип, если они две разные имена структура с такой же структурой, одинаковым содержимым и того же размера, какая разница я буду видеть?


Хорошо, позвольте мне прояснить этот вопрос, теперь программа меняется на этот

unsigned int x=1; 
printf("%d",sizeof x); 
return 0; 

unsigned long x=1; 
printf("%d",sizeof x); 
return 0; 

и два выхода 4 для моего компилятора, и теперь используется х, поэтому нет оптимизированного

Теперь мой вопрос: если вы скажете мне, что есть какая-то разница, где разница в памяти? Они должны отличаться в памяти, потому что типы различны. Но где? Я не мог этого найти.

Если вы скажете мне, что в памяти нет разницы. Почему нет разницы. Что-то должно храниться где-то в памяти. В противном случае, я думаю, что компьютер не знает, что адрес является переменной и какой переменной.

+0

Обратите внимание, что для компилятора на 64-разрядной машине обычно используется 32-битный int. Но если они действительно одинакового размера, я сомневаюсь, что вы увидите разницу. –

+0

Обратите внимание, что msvc также имеет длину 32 бит для x64. – Bathsheba

+0

Обратите внимание, что поскольку 'x' не используется, эта строка, вероятно, будет оптимизирована, поэтому не будет никакой разницы, независимо от размера. – interjay

ответ

2

Зависит от компилятора. Большинство 64-битных компиляторов используют 32 бит int и 64 бит long.

32-разрядные компиляторы обычно составляли 32 бит int и 32 бит long.

16-разрядные компиляторы обычно были 16 бит int, 32bit long и 16bit short.

Ни одно из них не гарантируется, если это не указано в документации конкретного компилятора. Стандарт только говорит, что sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long), и что char - 1 байт.

+0

Пожалуйста, ознакомьтесь с моим обновленным вопросом, потому что я не задаю разницу в типе данных. –

+1

Мой ответ по-прежнему стоит, обновление не изменило основной вопрос. Теоретически, компилятор должен различать эти типы независимо от того, что он хочет. На практике вы не увидите разницы, если sizeof будет одинаковым (что изменится на разных компиляторах). Если вы хотите быть уверенным - используйте 'int32_t' и т. Д. Типы данных, введенные в C99 (stdint.h). – keltar

Смежные вопросы