gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:54:57 24 4
gpt4 key购买 nike

我有以下问题:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com