如何使用自定义分配器打开 std::ofstream?

How to open a std::ofstream using a custom allocator?

我正在用 C++ 编写调试工具。该工具不允许使用 malloc 堆,因为这样做可能会改变正在调试的程序的行为。相反,调试工具有自己的堆,与 malloc 堆分开(我们称它为“调试器的堆”)。

我的调试工具大量使用 C++ STL 'Allocator' 参数,以确保我的所有数据结构都进入调试器的堆中。到目前为止,一切正常。

现在我需要将输出文件写入磁盘。我很确定打开 std::ofstream 会在堆上分配内存。我的意思是,文件缓冲区必须去某个地方。但是 std::ofstream 不接受 Allocator 参数。有没有办法打开输出文件,并将文件缓冲区放入“调试器堆”?

是的,您不能在您的方案中使用流。

在大多数平台上,您可以使用POSIX open function and then call read, write and close as appropriate. On Windows they renamed it _open,但基本相同。

这些函数是无缓冲的,因此不会产生堆分配。另一方面,如果你执行大量小的读取或写入,你的程序会因为缺乏缓冲而变慢,所以你在设计代码时需要考虑到这一点。