繁体   English   中英

boost :: circular_buffer是否等效于文件?

[英]boost::circular_buffer equivalent for files?

我正在寻找一个允许在磁盘上获取循环缓冲区的库。
在Boost中,有一些类似的东西,但是它是一个基于内存的容器: Circular_buffer

您可以将其命名为自然的名称。

您正在寻找内存映射文件。

使用正确的分配器,可以使容器在此内存映射区域中分配。 那将使容器“在磁盘上”。

我将看到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM