linux软件系统分为内核和应用程序,我觉得主要使用内存是在应用程序。应用程序是以进程和动态库为单位,内存优化应该是以进程和动态库来进行优化。前期学习《嵌入式linux内存使用与性能优化》的书集,现在做学习总结笔记,希望对大家也会有帮助。
linux进程由五段组成,BSS段、数据段、代码段、堆、栈组成。代码段是全系统共享,所以进程内存优化主要是在BSS段、数据段、堆、栈内进行。如下记录常用的优化方案。
- 堆段:
在进程中、我们可以调用mallopt函数,来调整libc的内存管理先行为。
M_TRIM_THRESHOLD 堆顶内存回收阀值,默认值为128K。堆顶空闲内存达到阀值时,调用系统brk,将内存归还给系统。
M_TOP_PAD 堆顶保留空间内存的数量,默认值为0
M_MMAP_THRESHOLD libc中大块内存阀值。大于该阀值,系统调用mmap申请内存。默认值为128K。
- 栈段:
linux系统中进程栈段的内存使用增加后,函数返回不会被释放,但是下次进入函数是可以复用的。所以栈段的内存只会增加不 会减少。对我们来讲,尽量少用递归函数及在函数内分配大块内存。
优化方法:
1、尽量 避免在栈空间申请大量内存。
2、尽量避免使用递归函数。
环境变量及参数及优化方法::
新增环境变量是存放在堆区。修改环境变量存在新申请的堆空间,不会释放原内存。
尽量在进程