我们有一个场景,其中我们动态增长用于boost的r树几何索引的内存映射文件。我们还利用了boost的进程间内存映射文件api。
机械师已经按照取消映射文件,进行增长和重新映射的方式进行了整理-所有这些工作。
到目前为止,我们已经尝试过以坐标固有尺寸的10倍高估尺寸,这种方法可以正常工作,但是在使用du
进行检查时被严重高估了。
有什么方法可以预测(最坏情况还是最精确的情况)在给定对象数量的情况下,我们要求映射文件增长多少大小?低估(例如系数为5)最终导致堆栈崩溃。
谢谢
最佳答案
从纯粹的意义上讲,这个问题与Boost-inteprocess无关。
您想知道分配模式(不仅是净分配量,而且还由于碎片而导致有效的“池”使用)。
您可以做的是分配器使用情况的统计信息(很好的问题:是否有某种统计信息收集分配器适配器?)并将其计算出来。
当然,您将处于近似范围内,但是如果有足够的模拟运行,您应该会获得可用的信息。
作为最后的选择,Boost Geometry的来源/开发人员将是要问的人。
其他 Angular
关于Boost Interprocess,我们不知道您在使用什么。我将假设为managed_mapped_file
/ managed_heap_memory
/ managed_external_buffer
。请注意,将它们与默认的内存分配策略(rbtree_best_fit)一起使用时,可能会出现相当大的碎片或仅分配开销(对于基于节点的容器,可能包括rtree)。
相关示例:
这立即为您提供了一些使用思路:
shm.get_free_memory()
获取段在托管内存段之外使用rtree时,使用内存分析器(如Valgrind Massif)使用
盒子外面:
备件文件是神奇的。
关于c++ - 估计内存映射的boost rtree所需的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339977/