gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:38 26 4
gpt4 key购买 nike

我想用更健壮的分配器替换标准分配器(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/

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