c++ - 链接 Google TCMalloc 库的最安全方式

标签 c++ c windows tcmalloc

经过几天的测试,我发现运行时补丁机制 patch_functions.cc在生产环境中使用是不安全的。
除了 HeapAlloc() 和 HeapFree() 之外,它似乎在 VS2010 项目中运行良好,但由于一些 Unresolved 问题而无法在 VS2015 项目中使用 Open Issues . Windows 自述文件描述了使用 tcmalloc 的替代方法:


上述所有方法的替代方法是静态链接您的应用程序 用 libc,然后用 tcmalloc 替换它的 malloc。这让你 正常构建和链接您的程序; tcmalloc 支持 进入后处理步骤。这个比上面的靠谱 技术(这取决于运行时修补,这本质上是 脆弱的),尽管需要更多的工作来建立。有关详细信息,请参阅 https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b


不幸的是,所提供的lik是无法访问的,似乎google已经关闭了该组。

有人可以向我解释如何执行此操作吗?

最佳答案

我假设它建议编写您自己的 malloc,它使用 tcmalloc

因此您必须定义并链接您自己的(通过创建或使用 .c 又名翻译单元)并编写类似这样的内容

#ifdef __cplusplus
extern "C" {
#endif

#include <stdlib.h>

void* malloc(size_t size) {
    return tcmalloc(size);
}

//Also define a free if memory which has been allocated by tcmalloc 
//needs to be freed by a special function
// Like 
/*
void free(void* ptr) {
    if (ptr) {
        tcfree(ptr);
    }
}
*/

#ifdef __cplusplus
}
#endif

问题是:根据您的构建系统或链接器,它可能会出现双符号或引用问题。然后你必须以某种方式排除 libcs​​ malloc,或者自己更改 libc。

关于c++ - 链接 Google TCMalloc 库的最安全方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39577554/

相关文章:

c++ - 产生幂律分布的随机数生成器?

c++ - 将 Eigen::SparseMatrix<double> 转换为 deal.ii::SparseMatrix<double>?

c - valgrind 不理解 bzero

c# - 在新的浏览器进程中打开一个 URL

c++ - 在 Qt 中将父级添加到 UI 对象

C++ - Boost.Promise、Boost.Unique_Future 和 move 语义

c++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

C memcpy 在 Linux 和 Windows 上的行为不同

python - Python 3.6.5(64 位)上的 GDAL

c - 对话框无法第二次打开。 GTK+、Glade 和 C