64-битное приложение: расположение в памяти

64-битная ОС относится к битовой ширине регистров общего назначения. Он способен обрабатывать 64 бита (данные + операции) одновременно.

Мы знаем, что для того, чтобы 64-битная система была действительно полезной, программистам нужно писать 64-битные приложения.

Однако мне интересно, в чем разница между 32-битным и 64-битным приложениями? Я не спрашиваю, какие изменения в конфигурации мне нужно сделать для компиляции 64-битного приложения; вместо этого я хотел бы знать структурные различия двух приложений в памяти.

Например, программа на C на Linux обычно выглядит в памяти следующим образом: 1, текстовый сегмент 2, инициализированный сегмент данных 3, неинициализированный сегмент данных 4, куча 5, стек

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

Также, когда 64-битное приложение скомпилировано, давайте предположим, что одна инструкция в исходном коде скомпилирована в инструкцию add mips в коде сборки:

add $1 $2 $1 // $1 += $2;

Каждая команда mips кодируется ровно 32 бита. Итак, вот вопрос, если приложение настроено для компиляции как 64-битное приложение, что быadd инструкция похожа? он все еще имеет 32 бита или он расширен до 64 бит, что нарушает правило mips? Если он по-прежнему 32-битный, я не вижу, в чем разница с 64-битным приложением, так что оно «вводит 64-битную ОС в полную игру».

Пожалуйста, просветите меня.

Ответы на вопрос(1)

Ваш ответ на вопрос