标签:函数调用 配置 嵌入式 highlight 变量 files 获得 最好 local
(都是自己敲出来的,想到哪里写到哪里,面对的是有一定基础的朋友,有问题、建议的朋友可以留言,我不定期答疑;可以随便转发,只求更多人知道)
(至2020已工作10年了,一直在忙着分析问题、解决问题,现在每解决一个问题就写一篇,分享给有需要的人)
继上一篇《Linux Userspace Kernelspace内存分布》之后,在分析一下内存优化的方法。
https://www.cnblogs.com/tangtangworld/p/11738090.html
后面还有一篇进程空内存使用分布进一步分析的方法,看后面有没有时间,这几天被几个Kernel Panic绊住了,在分析net子系统的代码。(MTK的SDK到处是坑)
通过对/proc/meminfo的分析,初步看去可以优化的地方不多:
1,tmpfs:/tmp下文件数目: Active(anon), Inactive(anon)
2,各个进程打开的文件:Active(file), Inactive(file)
分析进程中内存的分布,尝试回答下面的问题,之后对进程的内存进行优化。注意要对业务比较熟悉,内存优化就是减少不需要的操作,通过优化数据结构和算法来达到目的。(后面可能会写几篇关于数据结构和算法的心得)
下面以bash为例进行解说,首先看到的是size命令的输出:
text data bss dec hex filename 1127387 47356 40056 1214799 12894f /usr/bin/bash
通过size命令可以看到bash的代码段、数据段、bss段的大小。
进程的内存分为代码段、数据段、BSS段、heap、内存映射、stack,在0~3GB的虚拟地址空间上,依次由低地址到高地址非连续排列。
root@VirtualBox# cat /proc/129473/maps 558d518a4000-558d518d1000 r--p 00000000 08:05 1835663 /usr/bin/bash 558d518d1000-558d51982000 r-xp 0002d000 08:05 1835663 /usr/bin/bash 558d51982000-558d519b9000 r--p 000de000 08:05 1835663 /usr/bin/bash 558d519b9000-558d519bd000 r--p 00114000 08:05 1835663 /usr/bin/bash 558d519bd000-558d519c6000 rw-p 00118000 08:05 1835663 /usr/bin/bash 558d519c6000-558d519d0000 rw-p 00000000 00:00 0 558d51b9c000-558d51c41000 rw-p 00000000 00:00 0 [heap] 7f971e273000-7f971e294000 rw-p 00000000 00:00 0 7f971e294000-7f971e297000 r--p 00000000 08:05 1837196 /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so 7f971e297000-7f971e29e000 r-xp 00003000 08:05 1837196 /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so 7f971e29e000-7f971e2a0000 r--p 0000a000 08:05 1837196 /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so 7f971e2a0000-7f971e2a1000 r--p 0000b000 08:05 1837196 /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so 7f971e2a1000-7f971e2a2000 rw-p 0000c000 08:05 1837196 /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so 7f971e2a2000-7f971e2a8000 rw-p 00000000 00:00 0 7f971e2bb000-7f971eb2b000 r--p 00000000 08:05 1837771 /usr/lib/locale/locale-archive 7f971eb2b000-7f971eb2e000 rw-p 00000000 00:00 0 7f971eb2e000-7f971eb53000 r--p 00000000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971eb53000-7f971eccb000 r-xp 00025000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971eccb000-7f971ed15000 r--p 0019d000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971ed15000-7f971ed16000 ---p 001e7000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971ed16000-7f971ed19000 r--p 001e7000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971ed19000-7f971ed1c000 rw-p 001ea000 08:05 1837188 /usr/lib/x86_64-linux-gnu/libc-2.31.so 7f971ed1c000-7f971ed20000 rw-p 00000000 00:00 0 7f971ed20000-7f971ed21000 r--p 00000000 08:05 1837189 /usr/lib/x86_64-linux-gnu/libdl-2.31.so 7f971ed21000-7f971ed23000 r-xp 00001000 08:05 1837189 /usr/lib/x86_64-linux-gnu/libdl-2.31.so 7f971ed23000-7f971ed24000 r--p 00003000 08:05 1837189 /usr/lib/x86_64-linux-gnu/libdl-2.31.so 7f971ed24000-7f971ed25000 r--p 00003000 08:05 1837189 /usr/lib/x86_64-linux-gnu/libdl-2.31.so 7f971ed25000-7f971ed26000 rw-p 00004000 08:05 1837189 /usr/lib/x86_64-linux-gnu/libdl-2.31.so 7f971ed26000-7f971ed34000 r--p 00000000 08:05 1841972 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 7f971ed34000-7f971ed43000 r-xp 0000e000 08:05 1841972 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 7f971ed43000-7f971ed51000 r--p 0001d000 08:05 1841972 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 7f971ed51000-7f971ed55000 r--p 0002a000 08:05 1841972 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 7f971ed55000-7f971ed56000 rw-p 0002e000 08:05 1841972 /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2 7f971ed56000-7f971ed58000 rw-p 00000000 00:00 0 7f971ed64000-7f971ed6b000 r--s 00000000 08:05 2498817 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache 7f971ed6b000-7f971ed6c000 r--p 00000000 08:05 1837183 /usr/lib/x86_64-linux-gnu/ld-2.31.so 7f971ed6c000-7f971ed8f000 r-xp 00001000 08:05 1837183 /usr/lib/x86_64-linux-gnu/ld-2.31.so 7f971ed8f000-7f971ed97000 r--p 00024000 08:05 1837183 /usr/lib/x86_64-linux-gnu/ld-2.31.so 7f971ed98000-7f971ed99000 r--p 0002c000 08:05 1837183 /usr/lib/x86_64-linux-gnu/ld-2.31.so 7f971ed99000-7f971ed9a000 rw-p 0002d000 08:05 1837183 /usr/lib/x86_64-linux-gnu/ld-2.31.so 7f971ed9a000-7f971ed9b000 rw-p 00000000 00:00 0 7fff0c34e000-7fff0c36f000 rw-p 00000000 00:00 0 [stack] 7fff0c395000-7fff0c398000 r--p 00000000 00:00 0 [vvar] 7fff0c398000-7fff0c399000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
//ToDo增加一个案例,分析内存和优化
标签:函数调用 配置 嵌入式 highlight 变量 files 获得 最好 local
原文地址:https://www.cnblogs.com/tangtangworld/p/14214037.html