嵌入式系統(tǒng)內(nèi)存往往是有限制的(成本考慮),因此需要盡量支持更多的功能,同時(shí)盡量減少使用的內(nèi)存。
一種方法是把需要支持的功能做成共享庫(kù)的形式,需要這個(gè)功能的時(shí)候加載共享庫(kù),不需要的時(shí)候卸載共享庫(kù),從而把內(nèi)存釋放出來(lái)。
下面舉個(gè)例子說(shuō)明。
$ gcc 1.c -shared -fpic -g -o lib1.so
$ gcc test.c -g -o test -ldl -l1 -L.
打開(kāi)gdb,執(zhí)行 gdb test,
在dlopen執(zhí)行前,程序內(nèi)存使用:
$ ps -p $(pidof test) -o %cpu,%mem,cmd,rss,rsz,vsz,trs
%CPU %MEM CMD RSS RSZ VSZ TRS
0.0 0.0 /home/charles/tmp/test 696 696 2084 1
dlopen()執(zhí)行后:
$ ps -p $(pidof test) -o %cpu,%mem,cmd,rss,rsz,vsz,trs
%CPU %MEM CMD RSS RSZ VSZ TRS
0.0 1.0 /home/charles/tmp/test 42000 42000 43192 1
dlclose()后:
ps -p $(pidof test) -o %cpu,%mem,cmd,rss,rsz,vsz,trs
%CPU %MEM CMD RSS RSZ VSZ TRS
0.0 0.0 /home/charles/tmp/test 1092 1092 2216 1
可以看到,大部分用到的內(nèi)存都釋放掉了。
然后如果執(zhí)行下一次循環(huán), dlopen()后:
$ ps -p $(pidof test) -o %cpu,%mem,cmd,rss,rsz,vsz,trs
%CPU %MEM CMD RSS RSZ VSZ TRS
0.0 1.0 /home/charles/tmp/test 42008 42008 43192 1
執(zhí)行 dlclose()后:
$ ps -p $(pidof test) -o %cpu,%mem,cmd,rss,rsz,vsz,trs
%CPU %MEM CMD RSS RSZ VSZ TRS
0.0 0.0 /home/charles/tmp/test 1092 1092 2216
內(nèi)存又恢復(fù)到上次的數(shù)值了。
-
嵌入式
+關(guān)注
關(guān)注
5046文章
18817瀏覽量
298535 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
2903瀏覽量
73536
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論