Почему указатели остаются одинакового размера в 64-битных и 32-битных системах? - PullRequest
1 голос
/ 10 декабря 2011

Я недавно установил 64-битную ОС на свой компьютер, я думал, что sizeof(char*) даст мне 8 вместо 4. Разве я не получу 64-битные адреса в моих указателях?

Ответы [ 3 ]

7 голосов
/ 10 декабря 2011

Это потому, что используемый вами компилятор испускает 32-битный код. Если вы используете 64-битный компилятор, то указатели будут иметь ширину 8 байт.

Обратите внимание, что большинство 64-битных систем имеют возможность запускать 32-битный код на уровне эмуляции. В Windows слой эмуляции известен как WOW64 . Это ясно, что здесь происходит.

1 голос
/ 10 декабря 2011

ОС обычно не влияет на генерацию кода. Если вы запустите один и тот же компилятор и те же библиотеки, вы получите один и тот же код независимо от того, является ли ОС 32-битной или 64-битной. Вы можете скомпилировать и запустить 32-битное программное обеспечение на 64-битной ОС. Вы можете скомпилировать 64-битное программное обеспечение в 32-битной ОС.

Компилятор определяет тип сгенерированного кода. ОС только определяет, можете ли вы ее запустить.

0 голосов
/ 10 декабря 2011

Да, вы должны, но учтите, что одна и та же операционная система может выполнять как 32-битный, так и 64-битный код, и что в установленной вами «64-битной ОС» «64-битная» может означать только «64-битная возможность».

Вы действительно должны дать более подробную информацию об особенностях ОС. Например, Mac OS X Snow Leopard поставляется с версиями GCC и Clang, которые по умолчанию используют 64-битный код, и вы можете использовать опцию -m32 для генерации 32-битного кода. Возможно, в вашей 64-битной ОС соглашение отменено (то есть вы должны использовать -m64 или аналогичный параметр)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...