编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

一周一练 丨 嵌入式第四弹(嵌入式 教程)

wxchong 2024-07-06 01:00:45 开源技术 11 ℃ 0 评论

同学们好呀~又到美好的周一啦~


八月份咱们的一周一练的板块是:

嵌入式!


我们将从C语言开始逐步前行。


我们的目的是把知识化为己有!

学到就是你的!


你,准备好了吗?


1

如何检测内存泄漏?


内存泄露是指用程序运行过程中户失去对内存的访问权利,最简单的内存泄露如下。直观感受是:随着时间的推移,程序占用的内存在不断的增加。若代码中没有业务逻辑需要积累存储数据,就一定是发生了内存泄露。

确定泄露内存的代码位置就需要借助相关的工具/插件/函数。

1)使用 IDE 提供的调试工具跟踪调试,并在软件窗口中监视内存的使用情况;这种方式比较慢,常与断点配合使用,检查部分代码段有效;

2)使用 glibc 库的内置函数 mtrace()/muntrace()来检测可能出现内存的漏的代码段;

3)安装 Valgrind Memcheck 是检测工具(Linux 下一款程序),使用如下命令执行代码即可:

valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./a.out;

4)还有一些检测内存泄露的函数库/工具,如:dmalloc(动态库)、memwatch(动态库)、 mpatrol

(内存泄漏检测器)dbgmem(动态库)、Electric Fence


补充:glibc 库的内置函数 mtrace()用法举例如下(C/C++环境均可):


检查内存泄露的原理:在申请堆内存时将申请记录下来,释放内存时将申请记录抹除,当函数 main()结束时,若申请记录中仍然存在记录就说明先前某个地方申请的堆空间没有释放!从这个意义上来说,在C++中,重载运算符 new,记录申请内存的信息(内存地址、内存大小、程序路径、函数名、行号)到容器;然后重载运算符 delete,删除容器中的申请记录;并在函数 main()的最后一步检查容器中的信息,也能实现内存泄露的检测。



2

数组和链表的优缺点比较


点击空白处查看答案


如图:


3

如何判断环型链表?


如图:


今天的题到这里就结束啦~

不知道你掌握的怎么样呢?

有任何疑问都可以留言噢,华妹会尽快回复~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表