c++ - 替换标准 C++ 分配器?

标签 c++ allocator

我想用更健壮的分配器替换标准分配器(C++ 标准只需要对 vector::resize 进行溢出检查)。许多库提供的各种 C++ 分配器在进行负面 self 测试时会一败涂地。

我可以使用更强大的分配器。 ESAPI 的分配器不仅检查溢出,它还有调试仪器来帮助发现错误。 http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h .

是否有一种标准方法可以轻松替换程序中使用的 C++ 分配器?我还想确保它在库代码中被替换,我可能无法访问源代码。

最佳答案

malloc 是一个库函数,可以用另一个具有相同签名的函数替换,std::allocator 是一个类模板,模板代码被实例化为需要并内联到使用它的代码中。一些标准库代码已经被编译到库的目标文件中,并将包含无法替换的实例化 std::allocator 代码。所以唯一的办法就是标准库提供一些非标准的方法来替换它的std::allocator。幸运的是,GCC 的 libstdc++ 允许您这样做,允许您在配置和构建 GCC 时选择用于 std::allocator 的实现,使用一些 different choices

将 ESAPI 分配器作为选项之一添加到 GCC 源中并不会做太多工作,然后重建 GCC 以将该分配器用作 std::allocator 的基类,提供它的实现。您可能需要稍微调整 ESAPI 分配器代码,并可能更改 libstdc++ configure 脚本以允许您说 --enable-libstdcxx-allocator=esapi

关于c++ - 替换标准 C++ 分配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13263796/

相关文章:

c++ - Visual Studio 2010 查看程序流程 (C++)

c++ - 如何现代化 VC++17/20 的分配器适配器

C++ STL 分配器与运算符 new

c++ - 如何让我的嵌套类进入模板化类以接受自身的其他版本?

c++ - Cmake:如何将库标记为依赖于系统库

memory - 使用自定义 Lua 分配器计算内存使用情况,但其结果与 collectgarbage ('count' 不同)

c++ - 分配失败时 C++ allocator::allocate 应该抛出还是返回 nullptr?

c++ - 强制 vector 的分配器指向特定位置

c++ - 如何修复 GLib-GObject-WARNING ** : cannot register existing type `gchar'

c++ - 较大矩阵中的最大相等子矩阵