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