Pytanie:Koszt naciśnięciem vs. stosu mov (vs. najbliższej pamięci), i napowietrznej wywołania funkcji
korzysta stos z taką samą prędkością jak dostęp do pamięci?
Na przykład mógłbym wykonać pracę w stosie lub mógłbym pracować bezpośrednio z etykietowaną lokalizacją w pamięci.
Tak, konkretnie: czy push ax
ma tę samą prędkość, co mov [bx], ax
? Podobnie jest pop ax
z tą samą szybkością, co mov ax, [bx]
? (Zakładamy bx posiada lokalizację w near
pamięci).
motywacja do pytanie:
powszechne jest w C, aby zniechęcić banalne funkcje, które mają parametry.
Zawsze uważałem, że to dlatego, że nie tylko parametry muszą zostać przekazane na stos, a następnie zrzucone ze stosu po powrocie funkcji, ale także dlatego, że samo wywołanie funkcji musi zachować kontekst procesora, co oznacza więcej stosu stosowanie.
Ale zakładając, że zna się odpowiedź na pytanie z nagłówka, powinno być możliwe określenie ilościowego obciążenia, które funkcja wykorzystuje do ustawienia się (kontekst push/pop/zachowania itp.) W kategoriach równoważnej liczby bezpośrednich dostęp do pamięci. Stąd naglące pytanie.
( Edit: Wyjaśnienie:
near
użyte powyżej jest w przeciwieństwie do
far
w
segmented memory model z 16-bitowej architektury x86).
Wow. Jestem odkrywcą. Właśnie znalazłem dobre, nie-n00b pytanie na StackOverflow. Świętowałem moje poszukiwania szampanem i przegłosowaniem! –
Zawsze uważałem operacje dekompresowania/zwiększania wywołania za naciśnięcie/naciśnięcie na ESP jako obciążenie w porównaniu do mov .... ale myślę, że powinno być o wiele więcej. – loxxy