如何减少频繁的分配和发布,
蓝盟为您提供这样的解决方案提高性能并避免内存碎片问题;
·能够存储可变长度数据,而不仅仅是愚蠢地预先指定最大长度;
基于SLAB算法实现内存池是个好主意:分配多个不同大小的块,并在请求时返回大于请求长度的最小块。对于容器,处理固定块的分配和恢复非常容易。当然,记住你需要设计一个安全的线程,转弯锁定更好,使用读写转弯锁定更好。
·分布式内容增长的管理是一个问题。例如,第一次需要1 KB的空间。由于数据源是连续写入的,第二次需要4KB空间。扩展空间易于实现,但有必要在扩展时复制数据。甚至对扩展的需求也非常大,有数百兆字节的数据,这并不容易。目前,没有更好的想法:像STL,指数增长分配的策略,复制数据是不可避免的,但至少重新分配的概率越来越小。
·如前所述,如果需要数百兆的数据扩展,最好使用映射到内存中的文件进行管理:映射文件后,虽然它占用了大量的虚拟内存,但只写入物理内存。它将被分配,更多的madvice()添加顺序优化建议,物理内存消耗也将减少。
不建议使用字符串或向量来管理内存。虽然它非常简单,但它不适合服务器软件开发中的STL,特别是在稳定性和性能非常高的情况下。