Я пытаюсь найти способ глобально переопределить malloc и связанные функции в visual C++ (2005). Моя установка - это dll со статически связанной библиотекой времени выполнения, которая состоит из моего собственного кода на C++, внешнего кода C++ и c. То, что я хочу сделать, - разрешить пользователю dll устанавливать собственные реализации функций распределения памяти.Глобально переопределить malloc в visual C++
Решения, которые я не могу использовать:
- Перекрытие новые и удалять во всем мире, существует множество внешних библиотек C в моей базе кода, что означает это будет не захват многих распределений.
определение malloc для другого символа. Это заставит меня подтолкнуть это определение к настройкам сборки всех используемых внешних библиотек, и я действительно хочу этого избежать.
Вещи, которые я не заботятся о
- Если какой-либо из внешних библиотек выделение памяти каким-либо другим способом (HeapAlloc, отображенные на память файлы или то, что они придумали), я признаю, что это не будет правильно отслеживаться путем переопределения malloc.
Самое разумное решение, которое я могу придумать, каким-то образом мешает процессу связи и гарантирует, что мой собственный malloc соединяется вместо стандартных, желательно, чтобы я мог использовать старый malloc функции по умолчанию.
В google perf-tools кажется, что они исправляют код функций вручную во время выполнения, чтобы вызвать функцию hook для вызова перед вызовом исходной функции. Это действительно лучший способ сделать это?
Вы пытаетесь сделать то же самое, что LD_PRELOAD в Linux? – LB40
Я не знаком с LD_PRELOAD, но, похоже, это связано с динамической связью, в моем случае malloc, free и их друзья статически связаны. – Laserallan
Не могли бы вы объяснить, почему вы думаете, что вам нужно это сделать? – 2009-08-22 15:40:26