如何强制库使用自定义std :: allocator?

时间:2011-09-18 02:15:15

标签: c++ visual-studio memory-management stl

我正在使用SFML,它通过std::vector<Uint32>和类似的其他类型处理大部分内存。所有声明都使用默认的分配器。 SFML库被编译为.lib文件,这些文件在Visual Studio中静态链接。 (如果需要,我拥有它的所有源代码。)

我的问题是,强制SFML使用我的自定义小对象/线程安全分配器为STL容器而不是默认值的最不痛苦的方法是什么?我需要更少地改变库本身,当然更好!

修改

如果它有帮助,请忘记库的实施;我可以随心所欲地重新编译。为了这个问题,想象一下这是我正在使用的代码。我的目标是更改所有STL容器使用的默认分配器。

EDIT2

如果这根本不可能,那么覆盖new本身是一种正确的方法吗?我已经读过,默认分配器只不过是新/删除操作上的糖涂层。

2 个答案:

答案 0 :(得分:2)

嗯,最“强力”或万无一失的方法似乎会创建一个预载库来实现malloc / free(以及朋友?)

这通常是堆调试器/边界检查器的运行方式。

但是,我对SFML分配器要求一无所知,因此如果空间非常有限,它可能无法工作。在这种情况下,我建议在需要时将数据“编组”(用于复制的花哨字)转移到自定义分配的区域

切线相关:

Eletronics Art拥有STL游戏开发的“端口”。它比定制分配器更重要(事实上,它没有默认分配器!)。你可以看看

答案 1 :(得分:0)

要更改默认的新运算符,只需实现此功能(在全局范围内):

void* operator new (std::size_t size) throw (std::bad_alloc);

您可以在那里找到更多信息:http://www.cplusplus.com/reference/new/operator%20new/

我不完全确定它适用于动态库。