Один із прикладів, коли я їх використовував, - це робота з дуже вбудованими системами з обмеженими ресурсами. Скажімо, у вас є 2 кб оперативної пам'яті, і ваша програма повинна використовувати частину цієї пам'яті. Вам потрібно зберігати, наприклад, 4-5 послідовностей, де їх немає у стеку, а також потрібно мати дуже точний доступ до місця зберігання цих речей, це ситуація, коли ви можете написати власний розподільник. Реалізації за замовчуванням можуть фрагментувати пам'ять, це може бути неприйнятним, якщо у вас недостатньо пам'яті та не вдається перезапустити програму.
Один проект, над яким я працював, - це використовувати AVR-GCC на деяких мікросхемах з низькою потужністю. Нам довелося зберігати 8 послідовностей змінної довжини, але з відомим максимумом. Стандартна реалізація бібліотеки управління пам'яттюявляє собою тонку обгортку навколо malloc / free, яка відслідковує, куди розміщувати предмети, попередньо додаючи кожен виділений блок пам'яті з вказівником лише на кінець цього виділеного фрагмента пам'яті. Виділяючи новий фрагмент пам'яті, стандартний розподільник повинен пройти по кожному з фрагментів пам'яті, щоб знайти наступний блок, який буде доступний, де потрібний розмір пам'яті. На настільній платформі це було б дуже швидко для цих кількох предметів, але ви повинні мати на увазі, що деякі з цих мікроконтролерів дуже повільні та примітивні в порівнянні. Крім того, проблема фрагментації пам’яті була величезною проблемою, яка означала, що у нас дійсно не залишається іншого вибору, як використовувати інший підхід.
Тож, що ми зробили, було запровадити власний пул пам'яті . Кожен блок пам'яті був досить великим, щоб вмістити найбільшу послідовність, яка нам знадобиться. Це виділяло блоки пам'яті фіксованого розміру достроково і відмічало, які блоки пам’яті зараз використовуються. Ми зробили це, зберігаючи одне 8-бітове ціле число, де кожен біт представлений, якщо використовується певний блок. Тут ми торгували з використанням пам’яті для спроби зробити весь процес швидшим, що в нашому випадку було виправдано, оскільки ми підштовхували цю мікроконтролерну мікросхему до максимальної потужності обробки.
У багатьох інших випадках я можу побачити, як писати свій власний алокатор у контексті вбудованих систем, наприклад, якщо пам'ять для послідовності не є основним оперативним пристроєм, як це часто буває на цих платформах .