Розподільник (C++)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

В мові програмування C++, розподільники (англ. allocators) — це важлива складова Стандартної бібліотеки С++. Стандартна бібліотека надає декілька структур даних, таких як list і set, зазвичай згадуваних як контейнери. Спільною рисою цих контейнерів є можливість змінювати розмір під час виконання програми. Для досягнення цього, зазвичай потрібна певна форма динамічного розподілення пам'яті. Розподільники опрацьовують всі запити на виділення й очищення пам'яті для даного контейнера. Стандартна бібліотека С++ забезпечує розподільники за не вказанням іншого, однак, розподільник також може бути наданий програмістом.

Розподільники були винайдені Александром Степановим як частина STL. Початково вони замислювались як спосіб зробити бібліотеку більш гнучкою й незалежної від підлеглої моделі пам'яті, дозволяли програмісту використовувати користувацькі типи вказівників та посилань з бібліотекою. Однак під час прийняття STL до Стандарту С++, комітет стандартизації C++ усвідомив, що повне абстрагування від моделі пам'яті спричинить неприйнятне падіння швидкодії. Для запобігання цьому, вимоги до розподільників зробили жорсткішими. Як наслідок, рівень підлаштування, який можуть забезпечити розподільники став обмеженішим від того яким його бачив Степанов.

Однак, існує багато перебігів, де бажані власноруч написані розподільники. Найчастіше згадуються — поліпшення швидкодії через використання пулів, оболонкування доступу до різних типів пам'яті, наприклад, спільної пам'яті або пам'яті зі збором сміття. Особливу перевагу можуть отримати програми з частими запитами на виділення маленьких кількостей пам'яті, як у швидкодії так і в об'ємі використаної пам'яті.

Посилання[ред.ред. код]