Pracuję nad kompilatorem dla języka podobnego do Schematu i czytam przez dysertację Dybviga. Mówi on, że osiągnął większą część swojego wzrostu wydajności przez przydzielanie ramek połączeń na stosie zamiast na stercie. Istnieje kilka sztuczek, które należy wykonać, aby faktycznie wykonać tę pracę w obecności zamknięć i kontynuacji.Co sprawia, że Scheming oparty na sterty jest wolniejszy niż schemat oparty na stosie?
Moje pytanie brzmi: skąd bierze się ten wzrost wydajności? Czy to tylko dlatego, że mniej obciążamy odśmiecarkę?
Innymi słowy: zakładając, że mamy nieskończoną ilość pamięci, czy przydzielone alokowane ramki połączeń będą nadal szybsze niż klatki alokowane dla sterty?
Wspominasz "śmieciarza" - jaki jest twój język implementacji? –
Mój język implementacji to C. Ale powinienem wyjaśnić, miałem na myśli wzrost wydajności dla skompilowanego kodu, * nie * wzrost wydajności dla samego kompilatora. –
Zwróć uwagę na odpowiedź, ale: (a) obsługa sterty zajmuje więcej czasu, ponieważ wymaga ona skanowania (nie jest ona liniowa jak stos); (b) praktycznie wszystkie architektury procesorów kładą szczególny nacisk na jak najszybsze uzyskanie dostępu do stosu, a nie w przypadku sterty. –