[英]boost::circular_buffer equivalent for files?
您可以将其命名为自然的名称。
您正在寻找内存映射文件。
使用正确的分配器,可以使容器在此内存映射区域中分配。 那将使容器“在磁盘上”。
我将看到Boost Circularbuffer是否直接支持此功能。
更新是。
最好的事情是,这使您完全有可能甚至使用IPC同步和线程同步。 使用“专用”内存映射,您可以映射可读写的缓冲区,而无需在某些过程中将更改写回到磁盘。
概念证明:
住在科利鲁 ¹
#include <boost/circular_buffer.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/managed_mapped_file.hpp>
namespace bip = boost::interprocess;
struct message {
int data[32];
};
int main()
{
bip::managed_mapped_file mmf(bip::open_or_create, "/tmp/circ_buffer.bin", 4ul << 20);
typedef bip::allocator<message, bip::managed_mapped_file::segment_manager> allocator;
boost::circular_buffer<message, allocator> instance(100, mmf.get_segment_manager());
}
¹在Coliru上,文件大小受到限制-这是可以理解的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.