我试图找出一种方法来全局覆盖malloc和相关函数在visual c + +(2005年)。我的设置是一个静态链接的运行时库,包括我自己的C++代码,外部C++和c代码的dll。我想要完成的是允许dll的用户设置自己的内存分配函数的实现。全局覆盖视觉c + +中的malloc
的解决方案,我不能使用:
- 重写新的和全球的删除, 有很多在 我的代码库,这意味着这不会 捕获许多分配外部C库。
将malloc定义为不同的符号。这会迫使我将这个定义推送到所有外部库的构建设置中,我真的想避免这种情况。
事情我不关心
- 如果任何外部库在其他一些方式分配内存(HeapAlloc,内存映射文件或任何他们拿出了),我接受这将不会通过重写malloc来正确跟踪。
最合理的解决方案,我可以拿出以某种方式与链接过程的干扰,并确保我自己的malloc被链接而不是标准的,最好我想能够使用旧的malloc作为默认功能。
在google perf-tools看来他们在运行时手动修补函数的代码,以允许在调用原函数之前调用一个钩子函数。这真的是这样做的最好方式吗?
您是否试图在Linux上执行与LD_PRELOAD相同的操作? – LB40 2009-08-22 13:56:53
我不熟悉LD_PRELOAD,但它似乎与动态链接有关,在我的情况下malloc,free和他们的朋友是静态链接的。 – Laserallan 2009-08-22 14:03:41
你能解释为什么你认为你需要这样做吗? – 2009-08-22 15:40:26