>> а также больше размер страницы,
> Пардон?! Стандартные 4Кб страницы никуда не делись?!ну я же и говорю: или огромные страницы, или огромные таблицы страниц. жутики.
> Кэши у х86-64 как правило не слишком мелкие.
таблицы страниц тоже. а ещё не вредно вспомнить, что в кэш радостно лезут и прикладные софтины. и всем надо-надо-надо!
> А еще, в х86–64 появилась относительная адресация (приветы дeбильному x86).
с тем, что там попытались немного починить систему команд (приделали инвалиду деревянную ногу — хотя не было у инвалида руки) я, кажется, не спорил.
>> и реально выигрыша почти никакого (или никакого вообще).
> А бенчи обычно иного мнения на этот счет.
бенчи вообще часто «иного мнения», потому что живут в своём параллельном мире.
>> а push/pop в современных процессорах совсем не такой дорогой,как кажется.
> Ну да, подкостылить пришлось. Какой-то отдельный буфер IIRC даже сделали. Вот это
> я понимаю - костылестроение для уродца :).
то ли дело стройный красивый x86_64 — ну совсем ни разу не костыли!
>> да и делают его только совсем глупенькие кодогенераторы,
> Щаз. Обычный вызов функции на х86 == push + pop. ABI такое.
и что? это ABI для библиотек. внутри программы её личные функции компилятор может вызывать так, как хочет. конечно, если программа занимается в основном тем, что вызывает библиотечные функции, которые ничего не делают, то это беда. но нужна ли такая программа?
> А у х86-64 функции с небольшим числом параметров (а таких большинство)
> могут получить параметры и отдать результат через регистры.
эффективно убрав эти регистры из списка свободно используемых. а если вдруг из функции другую (или эту же, хихикс) функцию понадобилось вызвать… ой, что это? push/pop? а-я-яй…
да, кстати. куча регистров — это костыль. ты не знал? так знай: куча регистров — это просто такой дополнительный кэш памяти, только ним зачем-то приходится вручную управлять. тьфу, гадость.
>> остальные вполне умеют регистры распределять получше.
> Распределяй, не распределяй, а полутора РОНов не хватит чтобы отдать функции параметры
> и забрать результат. Еще и считать где-то надо...
у тебя функции в вакууме живут. если функция impure, то она вызывает другие функции, и всё равно вынуждена эти свои параметры и временные значения сначала совать в память, а потом из памяти доставать. а если pure — то нормальный компилятор её просто заинлайнит и не будет ерундой заниматься.
>> как будто при вызове функций регистры не замусориваются,
> Посмотри на ABI.
а ты посмотри на мой текст выше.
>> никуда любимые перезагрузки не делись,
> В половине случаев их может и не быть - за счет упомянутого
> ABI.
магия цифр — страшная вещь.
— смотрите, у нас больше регистров, теперь можно вызывать функцию с параметрами в регистрах, а не на стеке!
— ура-а-а-а!
— извините, а что, если мне несколько функций одну из другой вызвать надо? оно же всё равно где-то в памяти будет вынуждено запоминать значения? и какая разница тогда?
— уйди, мальчик, не мешай ликовать! ура-а-а-а!