Jest taka stronka: https://godbolt.org/ na której można podpatrzyć jak kod C++ przekłada się na assemblera i dzięki czemu można się pobawić, postarać zrozumieć dlaczego np. przekazanie argumentu do funkcji dla "fundamental type" będzie szybsze przez wartość niż przez referencję czy jakieś inne takie kejsy można przetestować sobie i zobaczyć działanie chociażby RVO dla wektora. Niestety nawet jak poczytasz sobie o rejestrach procesora, jego instrukcjach to i tak jest niesamowicie ciężko zrozumieć dlaczego tak a nie inaczej generuje się kod assemblera. Np. ja zauważyłem, że przy każdym wejściu do funkcji mamy:
push rbp
mov rbp, rsp
a przy wyjściu:
pop rbp
ret
No to co szukasz na google i znajdujesz, że na wierzchołku stosu jest zapamiętanie poprzedniej ramki stosu by na końcu do niej zrobić returna. Ale tu już nie rozumiesz szerszego kontekstu bo uczyłeś się kiedyś że do stosu można odwołać się zawsze tylko od góry więc 2 rejestry segment stosu i wierzchołek stosu (SS::SP) powinny wystarczyć a tu jakieś jeszcze BP jest, o co tu chodzi. Masakra jest żeby to zrozumieć. Czy zna ktoś z was tutorial gdzie jest omówiony tego szerszy kontekst od A do Z. Pewnie pod jakimiś hasłami trzeba szukać jak kompilator generuje kod assemblerowy z C++ i dlaczego tak a nie inaczej. Może na youtubie coś ktoś z Was się natknął na coś takiego?