В системах, где несколько библиотек DLL могут приходить и уходить (через LoadLibrary / Freelibrary), и когда память может быть выделена в одной библиотеке DLL, но освобождена в другой (см. Предыдущий ответ), HeapAlloc и связанные функции представляются наименее распространенными-denominator для успешного совместного использования памяти.
Потокобезопасный, предположительно сильно оптимизированный докторами наук в большом количестве, HeapAlloc, похоже, работает во всех ситуациях, когда наш код, не предназначенный для совместного использования, использующий malloc / free, потерпит неудачу.
Мы являемся встроенным магазином C ++, поэтому мы перегружаем оператор new / delete в нашей системе, чтобы использовать HeapAlloc (GetProcessHeap ()), который может быть заглушен (на цели) или встроен (в окна) для переносимости кода.
Пока что нет проблем, когда мы обошли malloc / free, который, без сомнения, выглядит DLL специально, новая куча для каждой загрузки DLL.