Перегрузка new/delete, хранение "метки" для выделенного учас
От: SeninAndrew Россия  
Дата: 17.09.06 17:35
Оценка:
Перегрузил глобальные операторы new/delete для оптимизации многопоточного приложения на многопроцессорном компьютере. Суть оптимизации: выделение памяти каждым потоком из отдельной кучи (все под ОС Windows). Удаление участков памяти возможно не из того потока, который память создал. Следовательно, нужно хранить для каждого выделенного участка метку: номер кучи, из которой память была выделена.

Прошу критически оценить предлагаемый способ хранения метки. В new с помощью HeapAlloc выделяется на 8 байт больше требуемого объема. В начале выделенного массива записывается номер кучи. Возвращается указатель ((char*)pPointer) + 8. В delete по адресу ((char*)pPointer) — 8 читается номер кучи и из нее удаляется память.

8 байт (хотя достаточно 1) резервируется для того, чтобы не нарушалось выравнивание данных. Законен ли такой подход.

Буду рад также други идеям хранения требуемых "меток".
... << RSDN@Home 1.2.0 alpha rev. 651>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.