自定义内存管理,用于在文件中每行创建一个对象



这是我的情况:

我正在读取一个非常大的文件,比如说超过1GB的文件,对于每一行,我都会解释并提取该行的部分内容来创建一个对象。因此,我不断地分配内存:

//For each line in a 1GB file:
boost::shared_ptr<MyClass>(new MyClass(part_of_line[0], part_of_line[1]));

因此,我想写一些自定义内存管理器。我以前没有这样做过,也不太确定如何处理,但基本上我想把所有的分配组合在一起,减少分配内存的时间,如果分配的内存是连续的,那会更好。

  • 是否有任何预先存在的库已经为这样一个问题域编写(boost?),可以帮助我实现性能提升?

  • 或者,在什么情况下,我最好编写自己的自定义内存管理器?

    我想答案与图书馆的普通程度有关书面的,我的情况与一般情况有多大不同??

尽可能快地将文件读入内存,从内存映射文件中创建对象。您可以尝试零内存复制,在踏板中创建对象并在队列中传递结果。

读取文件的最快方式读取输入文件,最快的方式可能吗?我会使用boost::interprocess。

您可以在阅读之前查看文件大小,并使用它来估计您需要多少空间。然后使用vector::reserve在一步中分配一个连续块。

最大的性能增益将是避免分配每个对象。而是分配一个MyClass对象数组。当然,一个重要的副作用是你目前的记忆管理策略将不得不改变。

最新更新