Jednym z przykładów, kiedy ich użyłem, była praca z systemami wbudowanymi o bardzo ograniczonych zasobach. Powiedzmy, że masz wolne 2 KB pamięci RAM i Twój program musi zajmować część tej pamięci. Musisz przechowywać powiedzmy 4-5 sekwencji gdzieś, czego nie ma na stosie, a dodatkowo musisz mieć bardzo precyzyjny dostęp do tego, gdzie te rzeczy są przechowywane, jest to sytuacja, w której możesz chcieć napisać własny alokator. Domyślne implementacje mogą pofragmentować pamięć, może to być niedopuszczalne, jeśli nie masz wystarczającej ilości pamięci i nie możesz ponownie uruchomić programu.
Jeden projekt, nad którym pracowałem, polegał na użyciu AVR-GCC na niektórych chipach o małej mocy. Musieliśmy przechowywać 8 sekwencji o zmiennej długości, ale ze znanym maksimum. PlikStandardowa implementacja biblioteki zarządzania pamięciąjest cienkim opakowaniem wokół malloc / free, które śledzi, gdzie umieścić elementy, poprzedzając każdy przydzielony blok pamięci wskaźnikiem tuż za końcem tego przydzielonego fragmentu pamięci. Podczas przydzielania nowego fragmentu pamięci, alokator standardowy musi przejść przez każdy fragment pamięci, aby znaleźć następny dostępny blok, w którym zmieści się żądany rozmiar pamięci. Na platformie stacjonarnej byłoby to bardzo szybkie w przypadku tych kilku elementów, ale należy pamiętać, że niektóre z tych mikrokontrolerów są w porównaniu z nimi bardzo powolne i prymitywne. Ponadto fragmentacja pamięci była ogromnym problemem, co oznaczało, że nie mieliśmy innego wyjścia, jak tylko przyjąć inne podejście.
Więc to, co zrobiliśmy, to zaimplementowanie własnej puli pamięci . Każdy blok pamięci był wystarczająco duży, aby zmieścić największą sekwencję, jakiej byśmy potrzebowali. To przydzieliło z wyprzedzeniem bloki pamięci o ustalonych rozmiarach i oznaczyło, które bloki pamięci są aktualnie używane. Zrobiliśmy to, zachowując jedną 8-bitową liczbę całkowitą, w której każdy bit był reprezentowany, jeśli został użyty określony blok. Zamieniliśmy tutaj użycie pamięci na próbę przyspieszenia całego procesu, co w naszym przypadku było uzasadnione, ponieważ zbliżaliśmy ten mikrokontroler do jego maksymalnej mocy obliczeniowej.
Jest wiele innych przypadków, w których widzę pisanie własnego niestandardowego alokatora w kontekście systemów wbudowanych, na przykład jeśli pamięć dla sekwencji nie znajduje się w głównej pamięci RAM, co może często mieć miejsce na tych platformach .