gpt4 book ai didi

c++ - boost managed_mapped_file : setting maximum allowed memory usage

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:34 25 4
gpt4 key购买 nike

有什么方法可以设置 managed_mapped_file 使用的最大允许内存?例如,我有 64GB 的内存,我创建了一个 20GB 的文件。这全部加载到内存中。例如,有没有办法指定只使用 1GB 内存?甚至大约就足够了。

编辑:我应该添加我使用 boost::interprocess::vector.. 也许有专门化分配器的方法?

typedef bi::allocator<Node, bi::managed_mapped_file::segment_manager> allocator_node_t;
typedef bi::vector<Node, allocator_node_t> vector_node_t;

bi::managed_mapped_file* nodeFile = new bi::managed_mapped_file(bi::open_or_create, "nodes_m.bin", bigSize);
allocator_node_t alloc_n(nodeFile->get_segment_manager());
vector_node_t* nodes = nodeFile->find_or_construct<vector_node_t>("nodes")(alloc_n);

最佳答案

没有这样的方式(便携)。

同样前提是错误的:

For example, I have 64GB of memory and I create a 20GB file. This is all loaded into memory

错误:它只会加载使用过的页面。是的,这可能意味着您最终可能会拥有完整的 20GB 内存。只要没有其他进程需要物理内存来执行其他任务,操作系统就可以自由执行此操作。

如果操作系统以任何理由任意取消映射该数据,那将是愚蠢的。您希望操作系统利用可用内存。否则花在那些硅芯片上的钱。

EDIT: I should add I use boost::interprocess::vector.. maybe there is a way to specialize the allocator?

使用 boost::interprocess::vector没有自定义分配器首先不会使用共享内存。你需要使用例如boost::interprocess::allocator<T, boost::interprocess::managed_mapped_file::segment_manager>首先使用映射文件。

不,分配器中的任何内容都不能覆盖操作系统虚拟内存调整参数。

没有什么需要专门化(在 C++ 的意义上)

bi::managed_mapped_file* nodeFile = new bi::managed_mapped_file(bi::open_or_create, "nodes_m.bin", bigSize);
allocator_node_t alloc_n(nodeFile->get_segment_manager());
vector_node_t* nodes = nodeFile->find_or_construct<vector_node_t>("nodes")(alloc_n);

第一次执行此代码(即创建“nodes_m.bin”)将加载bigSize .事实上它甚至不会分配 bigSize在磁盘上!在所有支持它的系统上(我知道没有不支持它的主流操作系统)文件被创建稀疏

关于c++ - boost managed_mapped_file : setting maximum allowed memory usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com