169 похожих чатов

К примеру, у нас есть 6 аргументов функции. Мы их заносим

в регистры EAX, EBX, ECX, EDX, ESI, EDI
Все регистры заняты, и теперь перед тем, как сделать что-то, нам приходится сохранить регистр = минимум 12 раз = обращения к памяти тоже 12 раз

А теперь представим, что все они в стэке. Тогда обращений к памяти 6 (esp+смещение), регистры сохранять нужно только при входе и выходе, и то по усмотрению
К тому же, обращения распределены по коду - необязательно сразу на старте функции заносить все аргументы функции во все регистры, мы можем для одной части функционала использовать один аргумент = 1 обращение, потом весь функционал, далее ещё одно обращение. Это намного легче для процессора

И не забываем, что перед тем, как занести аргументы перед вызовом функции, регистры могут быть заняты, к примеру в EBX - хэндл, в ESI - ещё что-то, EDI тоже занят,
И что мы делаем? Правильно - ещё раз сохраняем. Это получается уже 18 обращений к стэку

5 ответов

23 просмотра

В нормальных функциях, как показывает практика, аргументов не больше 4-5 и так же используются 4-5 регистров для хранения промежуточных результатов. Это легко ложится на все роны. В арме и спарке, как по мне, так ещё меньше.

CLFLUSH 🇷🇺-rdseed Автор вопроса
Sergei Zhmylove
В нормальных функциях, как показывает практика, ар...

Ну если нравится сохранять регистры и по сто раз обращаться к памяти - пожалуйста

Ну это если не используют регистры r8 -R15 и хмм 0 - 15 а так дефицита нету вроде если воображение подключить!

Соглашения, обычно, не позволяют занять все регистры под аргументы, потому оставшееся просто кладётся на стек, те соглашения о вызовах, что применяют на x86_64 похожи на этакую золотую середину

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта