项目上需要处理若干组,每组 500M 左右的数据,数据组成是大概可以理解为 3 个 std::vector<float>,一个 std::vector<structA>( structA 为自定义结构体),每处理一组数据就需要释放掉。
数据处理大概包括:插值,平移等。
由于载入内存比较大,导致处理的时间越来越长,内存越来越碎片化。
找了几个内存池的解决方案,好像不是很好解决我的问题。比如 boost::pool ,std::allocator ,使用起来都比较麻烦,比如 boost ,很多释放都是静态的,allocator 的话,基本上需要重新造轮子。后面发现 c++17 添加了 pmr::monotonic buffer resource ,尝试 debug 几次之后,发现在现在的机器上一次只能分配 100M 的内存,200M 和 500M ,都会在运行的时候崩溃掉,应该是没有那么多的连续内存了,想问下大佬们,有什么推荐的解决方案(轮子)吗?
我期望中的解决方案其实与 pmr 的预期类似,就是我申请一块足够大的连续内存,让这块内存分配数据的存储空间,处理完后,直接将整块内存释放掉即可。如果没有联系的内存,也可以分配成几个 100M ,几个 50M ,几个 20M 这样子的,也会比完全碎片化的要快。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.