我正在使用SFML,它通过std::vector<Uint32>
和类似的其他类型处理大部分内存。所有声明都使用默认的分配器。 SFML库被编译为.lib文件,这些文件在Visual Studio中静态链接。 (如果需要,我拥有它的所有源代码。)
我的问题是,强制SFML使用我的自定义小对象/线程安全分配器为STL容器而不是默认值的最不痛苦的方法是什么?我需要更少地改变库本身,当然更好!
修改:
如果它有帮助,请忘记库的实施;我可以随心所欲地重新编译。为了这个问题,想象一下这是我正在使用的代码。我的目标是更改所有STL容器使用的默认分配器。
EDIT2 :
如果这根本不可能,那么覆盖new
本身是一种正确的方法吗?我已经读过,默认分配器只不过是新/删除操作上的糖涂层。
答案 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/
我不完全确定它适用于动态库。