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

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

我正在使用 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/

相关文章:

c++ - 从 std::string 复制到 char 数组并以 null 终止结果

C++ OOP 注册回调函数(typedef 问题)

C++ 代码崩溃并出现无限循环

c# - 为什么程序集的调用会占用如此多的 RAM?

c++ - 运营商删除 - 如何实现?

c++ - `new (std::nothrow)`是如何实现的?

c++ - 多线程中的同步

c# - 在构建时或运行时获取解决方案路径

visual-studio - 从 VS "Find Results"窗口打开 SQL 文件会在 SSMS 的两个实例中打开该文件两次

c++ - 防止在 Visual Studio 调试期间进入 "memory"