2013-12-19 2 views
3

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

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

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

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

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

Кроме того, когда 64-битное приложение компилируется, давайте предположим, что одна команда в исходном коде компилируется в инструкции добавить MIPS в ассемблере:

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

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

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

ответ

2

Во-первых, вы отметили вопрос MIPS, но задаете общий вопрос. Макет 64-битных приложений в MIPS не похож на другие 64-разрядные архитектуры. Но макеты - это то, как вещи упорядочены в памяти, а не такие сегменты, как вы сказали. Эти сегменты представляют собой только «зоны памяти» памяти, и почти все архитектуры имеют эти сегменты в своих исполняемых файлах.

64-разрядные архитектуры - это не просто «расширенный диапазон» адресной памяти, но также предоставляет новый набор команд. Поскольку некоторые из старых инструкций не работают с 64-битными данными, они должны создавать новые инструкции для работы.

О инструкциях, 64-разрядная версия MIPS по-прежнему использует 32-разрядную инструкцию. Если бы он расширялся до 64-битного, то что бы он содержал в добавленных 32 битах, в то время как другие 32-битные были уже достаточно (если не несколько избыточными) для представления всех аргументов. Но, конечно, было много новых инструкций для 64-битных чисел (например, переключение более 31 или загрузка/сохранение двойного слова ...). И btw, инструкция неверна без ,

+0

Спасибо за ваш ответ. Итак, предполагая, что мы скомпилируем наш код с 64-битными флагами, подразумевает ли это, что в текстовом сегменте двоичного файла это выглядит как-то ниже: [инструкция 1, 64 бит] [инструкция 2, 64 бит] ... и процессор просто берет 64 бит (1 инструкция) время, повторяя интерпретацию инструкций? – h9uest

+0

№ Как я уже сказал, длина инструкции по-прежнему составляет 32 бит. Никакая текущая архитектура не использует 64-разрядную инструкцию, поскольку это просто пустая трата кэша команд. С инструкцией, что долго вы можете кодировать 7 бит кода операции и все еще иметь место для кодирования 512k регистров –

+0

OK.Таким образом, в дополнение к более крупному адресуемому пространству памяти преимущество 64-битного ISA заключается в том, что мы можем одновременно захватить 2 команды и, следовательно, ускорить обработку (простейший случай, не учитывайте зависимость от команды)? – h9uest