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 в полную игру».
Пожалуйста, просветите меня.
Спасибо за ваш ответ. Итак, предполагая, что мы скомпилируем наш код с 64-битными флагами, подразумевает ли это, что в текстовом сегменте двоичного файла это выглядит как-то ниже: [инструкция 1, 64 бит] [инструкция 2, 64 бит] ... и процессор просто берет 64 бит (1 инструкция) время, повторяя интерпретацию инструкций? – h9uest
№ Как я уже сказал, длина инструкции по-прежнему составляет 32 бит. Никакая текущая архитектура не использует 64-разрядную инструкцию, поскольку это просто пустая трата кэша команд. С инструкцией, что долго вы можете кодировать 7 бит кода операции и все еще иметь место для кодирования 512k регистров –
OK.Таким образом, в дополнение к более крупному адресуемому пространству памяти преимущество 64-битного ISA заключается в том, что мы можем одновременно захватить 2 команды и, следовательно, ускорить обработку (простейший случай, не учитывайте зависимость от команды)? – h9uest