我想用一个更强大的分配器代替标准分配器(C++标准只需要对vector::resize进行溢出检查)。进行否定的自我测试时,许多库提供的各种C++分配器会平放于他们的脸上。
我可以使用更强大的分配器。 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/