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

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

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

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

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.