Tak zrovna ten boehmgc muze fungovat i v modu, kdy kompletne nahradi malloc, takze se pak nemusite starat ani o uvolnovani pameti naalokovane knihovnami, ktere nebyly pro alokator napsany. Samozrejme jen za predpokladu, ze k uvolneni vsech zdroju neni potreba provest jeste nejakou dalsi operaci (treba zavolat close()).
no jasne, ale porad se do toho bude plest omezeni jazyka. Prikad, alokace v ramci funkce v cecku na zasobnikovem ramci a vraceni ukazatele - to je proste spatne, kdezto v jazycich typu Java nebo Go se to neresi (v Jave proto, ze je vsechno reference na heap nebo primitivni hodnota, v Go proto, ze to kompilator odhali a neda tu oblast na zasobnik, ale na heap).
V Cčku můžete ukazatele schovat hodně kreativními způsoby. Přetypování na int je ještě slabý odvar. Koukněte třeba na xor linked list. Nebo třeba NaN packing, kdy se celý ukazatel dá schovat do NaNu v doublu.
Tracing GC rozhodně není všemocný zázrak, který by se dal jednoduše nasadit bez zásadních důsledků.
22. 3. 2024, 11:12 editováno autorem komentáře
Takhle funguje management paměti v Postgresu. Je to nadstavba nad malloc - která vytváří hiearchii tzv paměťových kontextů. palloc alokuje paměť z vybraného nebo aktuálního kontextu, pfree může paměť uvolňovat. Paměťové kontexty mají definovanou životnost - transakce, query, výpočet řádku, výpočet výrazu. Na začátku je náročnější na to zvyknout - musíte vracet data ve správném kontextu, pak to funguje jak víno.
Hlavně je to relativně jednoduchý přímočarý mechanismus bez jakýkoliv jednoduchých nebo složitých (chytrých) heuristik. Jednoduché, ale chytré a roky s tím nejsou žádné problémy.