c++ - C/C++ - 覆盖默认函数

标签 c++ c visual-studio-2008 malloc

我有以下问题:

Microsoft Visual Studio (我使用的是 2008 SP1) 是否提供任何方法来覆盖标准 C 函数,例如 mallocmemcpy

假设我有一些外部构建的库,其中包含 malloc.objmemcpy.obj。 库名为 library.lib

我应该如何构建我的项目,以便编译器使用我的(覆盖)版本的 malloc()memcpy() 例程,而不是提供的那些 (我假设它们共享相同的语法)

整个事情的重点是改变我项目中的每个 malloc 而不是像 my_malloc 或类似的别名,这样我就可以比较性能。

这可能吗?

谢谢。

最佳答案

是否可以更改构建和链接过程,以便替换 memcpymalloc 的实现?是的。这是个好主意吗?不是真的。

你最好只使用 #define 逻辑将这些函数重命名为 memcpy_testingmalloc_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/

相关文章:

c++ - 引用与指针正交吗?

C++ Sleep 函数没有按预期工作

c++ - GRPC/C++ - 服务器只读取双向流中的第一条消息

c - C中二叉搜索树中的叶子数

c - 交换两个文件的内容

c++ - 如何在 Visual Studio 2008 中创建自定义清理(清理后)事件?

c# - MySQL 查询正在执行但在 C# 中未被识别

c++ - opencv minMaxLoc 的 cv::mask 应该是什么样子?

c++ - 局部变量在编译时存储在哪里?

c# - 无法加载文件或程序集 'app_code' 或其依赖项之一