Программа С++, использующая несколько DLL и QT, должна быть оснащена заменой malloc (например, tcmalloc) для проблем с производительностью, которые могут быть проверены вызванных Windows malloc. С linux нет проблем, но с окнами существует несколько подходов, и я не считаю их привлекательными:
1. Поместите новый malloc в lib и не забудьте связать его сначала (Другой вопрос SO)
Это имеет тот недостаток, что, например, strdup по-прежнему будет использовать старый malloc, а бесплатный может привести к сбою программы.
2. Удалите malloc из статической библиотеки libcrt с помощью lib.exe(Chrome)
Это проверено/использовано (?) для chrome/chromium, но имеет тот недостаток, что он просто работает со статической связью crt. Статическая связь имеет проблему, если одна системная библиотека динамически связана с msvcrt, может быть несоответствие в распределении/освобождении кучи. Если я правильно ее понимаю, tcmalloc можно связать динамически так, чтобы существовала общая куча для всех самокомпилированных DLL (что хорошо).
3. Патч crt-source code (firefox)
Firefox jemalloc, по-видимому, исправляет исходный код Windows CRT и создает новый crt. Это опять-таки статическая/динамическая проблема связи выше.
Можно подумать об использовании этого для создания динамического MSVCRT, но я думаю, что это невозможно, потому что лицензия запрещает предоставление исправленного MSVCRT с тем же именем.
4. Динамическое обновление загруженного CRT во время выполнения
Некоторые коммерческие распределители памяти могут делать такую магию. tcmalloc может тоже, но это кажется довольно уродливым. У него были некоторые проблемы, но они исправлены. В настоящее время с tcmalloc он не работает под 64-битными окнами.
Есть ли лучшие подходы? Любые комментарии?