Memory Collector (не путать с GC)
От: Caracrist https://1pwd.org/
Дата: 04.07.10 08:37
Оценка: -1 :)
В с++ деструктор — это неотъемлемая часть функции. А вот освобождение памяти можно вынести за её пределы почти всегда. Идея очень проста в реализации, но не совсем понятно, как много она может дать. Вот по этому обращаюсь к уважаемой аудитории с просьбой поделиться соображениями, опытом и наработками.

Сама идея:
создать глобальный объект хранящий указатели (void*) на память требующую освобождения. По образу вот этого
Автор: remark
Дата: 10.03.10
, с учетом поправки
Автор: remark
Дата: 10.03.10
... назовём его LockFreeVPBuffer.
создать поток который по мере необходимости(или просто всегда, или по таймеру) освобождает всю память по указателям из LockFreeVPBuffer.
Заменить (overload) операторы new, new[], delete, delete[] на такие, чтоб при delete/delete[] указатель добавлялся в LockFreeVPBuffer (освобождать память на месте если буфер полон)
В new/new[] можно обработать неудачу при выделении. Не сразу бросать исключение, а сначала очистить содержимое LockFreeVPBuffer, и если повторно обламается то, тогда уже бросать.

Предположительные "за":
  • Основная логика будет выполнятся быстрее, и часть работы равномерно разойдётся по всему времени разряжая пиковые моменты.
  • Освобождение памяти будет идти последовательно и возможно меньше чередоваться с выделением, что замедлит фрагментацию памяти.

    Предположительные "против":
  • Оверхед на дополнительный поток, если активных потоков в программе мало, или процессоров(physical threads) мало, то это может стать довольно чувствительным.
  • Работы становится не меньше, весь тот же код всё равно выполнится, плюс добавится работа с LockFreeVPBuffer.

    П.С. Обратите внимание, что речь не идёт о том с каким аллокатором работает программа, системным или кастомным. (хотя это тоже может быть важно )
  • ~~~~~
    ~lol~~
    ~~~ Single Password Solution
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.