Tak, prowadzę kurs systemów komputerowych. Miałem kilka pytań na temat różnych systemów alokacji w celu wdrożenia malloc. W przypadku jawnych list, jeśli implementuję malloc przy użyciu stosu typu LIFO, jaki jest dokładnie cel posiadania wskaźników do poprzednio zwolnionej pamięci? Na przykład, dlaczego potrzebujesz podwójnie powiązanych list? Czy pojedynczo połączone listy nie działają równie dobrze?Programy alokacji Malloc
Malloc lecture. Znalazłem ten link online, możesz zobaczyć slajd 7, aby zobaczyć, o czym mówię.
Przyglądając się schematowi rozdzielonych list, te listy są jednokierunkowe, prawda? A także, czym właściwie jest mechanizm koalescencji? Na przykład, jeśli 4 słowa zostaną zwolnione, czy najpierw spróbujesz dołączyć do niego, gdy wolna przestrzeń wokół ciebie zostanie wstawiona z powrotem na odpowiednią segregowaną listę połączoną? A może po prostu wstawisz blok 4 słów w sekcji "4 słowa" odpowiedniej segregowanej listy połączonej?
Dziękuję.
Myślę, że widzę to, co mówisz, ale czy możesz bardziej szczegółowo wyjaśnić brak potrzeby utrzymywania wskaźnika? Również, jeśli wezwę wolny blok B. Czy zakładamy, że B-> next-> prev = B? Jeśli tak nie jest, nie widzę, jak pomogłyby podwójnie powiązane listy. Ponadto, jaki byłby najlepszy sposób na zainicjowanie sterty w segregowanym alokatorze list? Czy podzieliłbyś stronę na jakiś wzór? (Jak dać 64 darmowe bloki 2 słów, 64 darmowe bloki 4 słów, 64 darmowe bloki 8 słów ... aż trafisz w wyznaczoną kategorię nieskończoności? Czy istnieje lepszy sposób na zainicjowanie? – de1337ed
@ de1337ed: Może masz nie zapisano kodu przetwarzania listy węzłów? Daj mu wir: napisz funkcję, która wstawia węzeł do listy połączonej.Zachowaj listę w adresie = posortowana kolejność. Spróbuj z pojedynczym połączeniem. A następnie zmodyfikuj go dla podwójnie powiązanych. (Aby odpowiedzieć na twoje pytanie 'B-> next-> prev' jest * zawsze * B. Jeśli tak nie jest, to jest błąd.) Inicjalizacja sterty podlega decyzjom politycznym realizatora: powinno być kilka 512-bajtowe bloki gotowe do pracy? Zależy od systemu. – wallyk