Linux性能学习(2.6):内存_如何优化内存,提高效率


参考资料:
1.庄明强老师的《Glibc内存管理》
2.https://google.github.io/tcmalloc/tuning.html

在前面大致了解了内存中的一些参数,Buffer/Cached等,也了解系统的内存分配、内存池等相关概念,那么如何优化内存,提高效率呐?

1 尽量在栈上提前定义好变量

堆主要是通过malloc动态分配的区域,而栈则是保存局部变量的。在前面我们知道通过malloc来申请内存,即便是有内存池,还是需要消耗时间和性能来进行分配,所以如果将一些变量提前定义好,那么编译器在编译时候就自动分配到栈上,在程序运行时候,不需要再次申请,从而加快效率。

但是,这种方式也是有缺点,因为是局部的,所以如果函数调用结束就会自动释放;栈的空间也有限,如果申请的过大就会造成栈溢出。

2 多线程、小内存申请使用TCMalloc分配器

在前面文章,我们知道,TCMalloc对并发线程、小内存这种场景做了优化,如果服务场景正好是这种,则可以切换使用TCMalloc分配器。

3 尽量提高缓存命中率

比如读取文件时候去掉O_DIRECT ,让程序使用缓存的I/O,而不是直接I/O,加快读取速度;

参考《如何提高CPU缓存命中率》:在定义数据结构的时候,如果按照cache line的大小进行对齐,就可能减少读写内存的次数,提高性能,即空间换取时间。

函数循环体内的代码尽量精简,因为指令是放在指令缓存中的,大小是有限的,如果对某段代码需要多次读取,超过指令缓存大小,那么就无法发挥优势。

猜你喜欢

转载自blog.csdn.net/u011003120/article/details/128286772