Язык программирования C++ для профессионалов



         

Управление памятью - часть 2


inline size_t align(size_t s) /* Даже в простой функции размещения нужно выравнивание памяти, чтобы на объект можно было настроить указатель произвольного типа */ { union Word { void* p; long double d; long l; }

int x = s + sizeof(Word) - 1; x -= x%sizeof(Word); return x; }

static void* freep; // настроим start на свободную память

void* operator new(size_t s) // простая линейная функция размещения { void* p = freep; s = align(s); freep += s; return p; }

void operator delete(void*) { } // пусто

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




Содержание  Назад  Вперед