我正在使用 SFML,它通过 std::vector<Uint32>
处理大部分内存和其他类似的类型。所有声明都使用默认的分配器。 SFML 库被编译成 .lib 文件,这些文件在 Visual Studio 中静态链接。 (如果需要,我拥有它的所有源代码。)
我的问题是,强制 SFML 为 STL 容器使用我的自定义小对象/线程安全分配器而不是默认分配器的最不痛苦的方法是什么?我对库本身的改动越少,当然越好!
编辑:
如果有帮助,请忘记库的实现;我可以随心所欲地重新编译它。为了这个问题,假设这是我正在使用的代码。我的目标是从本质上改变所有 STL 容器使用的默认分配器。
编辑2:
如果那根本不可能,将覆盖 new
本身是一个正确的方法?我了解到默认分配器只不过是新/删除操作的糖衣。
最佳答案
好吧,最“暴力”或万无一失的方法似乎是创建一个实现 malloc/free(和 friend ?)的预加载库
这通常是堆调试器/边界检查器的操作方式。
但是,我对 SFML 分配器要求一无所知,因此如果空间非常有限,它可能无法工作。在那种情况下,我建议在需要时将数据“编码”(复制的花哨词)到自定义分配的区域
切向相关:
Eletronics Art 有一个用于游戏开发的 STL“端口”。它非常适合自定义分配器(事实上,它没有默认分配器!)。你可以看看
关于c++ - 如何强制库使用自定义 std::allocator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7459080/