嵌入式系统节省内存的解决方法

电子说

1.3w人已加入

描述

嵌入式系统内存往往是有限制的(成本考虑),因此需要尽量支持更多的功能,同时尽量减少使用的内存。

一种方法是把需要支持的功能做成共享库的形式,需要这个功能的时候加载共享库,不需要的时候卸载共享库,从而把内存释放出来。

下面举个例子说明。

内存

$ gcc 1.c -shared -fpic -g -o lib1.so

内存

$ gcc test.c -g -o test -ldl -l1 -L.

打开gdb,执行 gdb test,

在dlopen执行前,程序内存使用:

$ 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()执行后:

$ 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

可以看到,大部分用到的内存都释放掉了。

然后如果执行下一次循环, 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

执行 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

内存又恢复到上次的数值了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分