Главная страница \ Статьи \ Программирование \ Create/Destroy и Allocate/Free - в чём разница?

Create/Destroy и Allocate/Free - в чём разница?

Достаточно часто в API и названиях библиотечных функций встречаются функции с префиксами или суффиксами Create и Allocate, а также парные им Destroy и Free. К сожалению не все программисты понимают концептуальную разницу между этими понятиями.

Create и Destroy применяются в случае, когда события создания и разрушения объектов (или областей памяти) носят однократный или низкочастотный характер. Примерами могут служить события создания окна, создания буфера, создание меню и т.п.

Если же события носят высокочастотный характер, то необходимо применение понятий Allocate и Free. Данные понятия предполагают использование кеширующего подхода к памяти. Т.е. память изначально выделяется под большее число объектов, чем изначально запрошено, но предполагается дальнейший запрос новых объектов. Пример подобного подхода - работа со связанными списками. Можно выделять под каждый объект списка свой блок памяти, но изначально предполагается, что список состоит из более, чем одного-двух элементов. Поэтому выделение памяти под каждый объект списка приведёт во-первых к повышенным накладным расходам, во-вторых к фрагментированию памяти.

Вместо этого можно создать блок памяти под, например, 100 объектов списка, и далее выделять из этого массива элементы по мере необходимости. При появлении 101 элемента память снова запрашивается не для одного, а для 100 объектов и т.д. В результате накладные расходы на процесс выделения памяти значительно снижаются, а также уменьшается общее фрагментирование имеющейся памяти.

Итак, повторим. Понятия Create/Destroy применяются для однократного или низкочастотного создания объектов, тогда как Allocate/Free для высокочастотного, часто буферизированного, выделения памяти под объекты.

Powered by Elise