我有以下问题:
Microsoft Visual Studio (我使用的是 2008 SP1) 是否提供任何方法来覆盖标准 C 函数,例如 malloc
、memcpy
?
假设我有一些外部构建的库,其中包含 malloc.obj
和 memcpy.obj
。
库名为 library.lib
。
我应该如何构建我的项目,以便编译器使用我的(覆盖)版本的 malloc()
和 memcpy()
例程,而不是提供的那些 (我假设它们共享相同的语法)?
整个事情的重点是改变我项目中的每个 malloc
而不是像 my_malloc
或类似的别名,这样我就可以比较性能。
这可能吗?
谢谢。
最佳答案
是否可以更改构建和链接过程,以便替换 memcpy
和 malloc
的实现?是的。这是个好主意吗?不是真的。
你最好只使用 #define
逻辑将这些函数重命名为 memcpy_testing
和 malloc_testing
之类的东西,然后有一个单个 #define
在两者之间切换。这样一来,您的解决方案就可以更好地移植到其他构建系统,并且其他程序员可以更直接地了解您到底在做什么。
编辑: 为了与评论保持一致,以下是您在共享头文件中执行的操作的示例:
#ifdef testing
# define my_malloc(n) testing_malloc(n)
#else
# define my_malloc(n) malloc(n)
#endif
如果需要,您可以甚至通过使用函数指针来支持运行时切换:
void *(__cdecl *my_malloc)(size_t);
// ...
void SetToTest() { my_malloc = testing_malloc; }
void SetToStandard() { my_malloc = malloc; }
关于c++ - C/C++ - 覆盖默认函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807505/