我想用更强大的分配器替换标准分配器(C++ 标准只需要对 vector::resize 进行溢出检查)。许多库提供的各种 C++ 分配器在提供负面的自测试时都会一败涂地。
我可以使用更强大的分配器。 ESAPI 的分配器不仅检查溢出,还具有调试工具来帮助发现错误。http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h.
是否有一种标准方法可以轻松替换程序中使用的 C++ 分配器?我还想确保它在库代码中被替换,我可能无法访问源代码。
Unlike malloc
这是一个库函数,可以被具有相同签名的另一个函数替换,std::allocator
是一个类模板,模板代码根据需要实例化并内联到使用它的代码中。一些标准库代码已经被编译到库的目标文件中,并且将包含实例化的std::allocator
无法替换的代码。所以唯一的方法是标准库提供一些非标准的方法来替换它std::allocator
。幸运的是,GCC 的 libstdc++ 允许您做到这一点,允许您选择用于的实现std::allocator
当 GCC 配置和构建时,有一些不同的选择 http://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#allocator.ext
将 ESAPI 分配器作为选项之一添加到 GCC 源中,然后重建 GCC 以使用该分配器作为std::allocator
提供其实施。您可能需要稍微调整 ESAPI 分配器代码,并且可能需要更改 libstdc++configure
脚本让你可以说--enable-libstdcxx-allocator=esapi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)