Язык программирования 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*) { }  // пусто

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




- Начало -  - Назад -  - Вперед -



Книжный магазин