я долго думаю и изучаю вывод компилятора языка Си в виде ассемблера, а также архитектуру процессора.Я знаю, что это может быть глупо для вас, но мне кажется, что что-то очень неэффективно.Пожалуйста, не сердитесь, если я ошибаюсь, и есть причина, по которой я не вижу всех этих принципов.Я буду очень рад, если вы скажете мне, почему он разработан таким образом.Я действительно искренне верю, что ошибаюсь, я знаю, гениальные умы людей, которые собирают компьютеры, знали причину для этого.Что именно, спросите вы?Скажу сразу, я использую C в качестве примера:
1: выделение памяти в локальной области стека:
Итак, типичное распределение локальной памяти использует стек.Просто скопируйте esp в ebp и затем выделите всю память через ebp.Хорошо, я бы понял это, если вам явно необходимо выделить ОЗУ по умолчанию для значений стека, но если я правильно понимаю, современные ОС используют подкачку в качестве уровня трансляции между приложением и физической ОЗУ, когда адрес, который вы хотите преобразовать, прежде чем достичь фактической ОЗУбайт.Так почему бы просто не сказать, что 0x00000000 - это int a, 0x00000004 - это int b и так?И получить к ним доступ только по mov 0x00000000, # 10?Потому что вы на самом деле не обращаетесь к блокам памяти 0x00000000 и 0x00000004, а к тем, в которых ваша ОС установила таблицы подкачки.На самом деле, поскольку при распределении памяти по ebp и esp используется косвенная адресация, «мой» путь был бы еще быстрее.
2: Двойственность распределения переменных:
Когда вы запускаете приложение, Loader загружает свой код вБАРАН.Когда вы создаете переменную или строку, компилятор генерирует код, который помещает эти значения в верхний стек при создании в main.Таким образом, есть фактическая инструкция для этого и это фактическое число в памяти.Итак, в оперативной памяти 2 записи одного и того же значения.Один в виде инструкции, второй в виде действительных байтов в ОЗУ.Но почему?Почему бы просто не объявить переменную count, в каком блоке памяти это будет, чем при использовании, просто вставить эту ячейку памяти?