搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
10分钟实现dotnet程序在linux下的持续部署_dotnet linux
2
微博高并发场景下的分布式缓存架构_请求漂移
3
人工智能(AI)、机器学习、深度学习 的关系_机器学习 深度学习 ai
4
2024年高职云计算实验室建设及云计算实训平台整体解决方案
5
互联网大厂需要什么样的人才
6
mac 关闭sip 保护系统_chmod: unable to change file mode on jetbrains.vmo
7
Zookeeper 的 Leader 选举
8
python的JSON用法——dumps的各种参数用法(详细)_json.dump()方法
9
docker privileged作用_docker总结
10
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案
当前位置:
article
> 正文
在频繁调用的底层函数中使用malloc的影响分析_频繁malloc free的问题
作者:知新_RL | 2024-07-31 14:25:30
赞
踩
频繁malloc free的问题
近来,测试中发现一个问题,ipcam会自动重启。经过定位,是增加了一个外部i2c timer作为看门狗引起的。
看了ex-wdt keep alive的code后发现,调用了一个i2c_WriteBytes()函数,这个Func中调用了两次malloc申请内存,并且,对malloc分配的
指针未作NULL的检查。我认为问题就出在这里,原因是这样:
1、虽然在这个Func中,malloc与free是配对使用的,但是,在一个多任务的环境中,这个Func可能被抢占,也就是说,先malloc后,接着是
其它进程去malloc,因此,malloc申请小的内存,仍然可能导致碎片化及整理内存的开销日益增大。这与测试中发现的现象可以吻合。
首先,测试中发现ipcam在重启前变得越来越慢,这是整理内存开销越来越大导致的,malloc/free执行时间会变得很长。其次,用两个进程来
keep ex-wdt alive,结果ipcam重启变得更频繁了,一晚上16台有6台重启。这是因为调用i2c_WriteBytes()函数变得更加频繁,压力之下加
速了该问题的发生。
2、对malloc申请的指针不作检查,如果不幸申请到null指针直接使用,同时有送进内核使用。这必然导致linux kernel crash,进而导致
watchdog复位。
针对上面的分析,可以用下面的方法进行验证:
1、压力测试:每秒feed一次ex-wdt,启动N个(N=10)进程来keep ex-wdt alive。其它进程仍然全部启动。
预期结果:几小时内出现CPU占用率不断升高,然后内核crash,进而watchdog复位。
2、对比测试:驱动函数取消malloc/free,同样进行压力测试。
预期结果:CPU占用率不会持续升高,内核不会crash并导致watchdog复位。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/909346
推荐阅读
article
数据结构:
单链
表_
node
malloc
sizeof
node
...
1、链式存储结构:在链式存储的过程中,每个元素Node不仅包含元素本身的信息,还包含元素之间的逻辑信息。前驱结点包含后继...
赞
踩
article
数据结构
学习日记
(
四)_(
lnode
*)
malloc
(
sizeof
(
lnode
));...
一,双链表单链表只包含后继节点的指针,从一个节点出发只能找到后继的各个节点双链表又添加一个指针域,指向前驱节点,表头节点...
赞
踩
article
链表的概念及创建_
node
*
p1
;
p1
= (
node
*)
malloc
(
sizeof
(
node
...
1.链表是由如干个节点所组成的(链表的各个节点结构是完全相似的),节点是由有效数据和指针组成的,有效数据区是用来储存数据...
赞
踩
article
C语言
单链
表
基础_(p
node
)
malloc
(
sizeof
(
node
) );...
前言一直以来对链
表
都理解的不深,没有个系统的总结学习。今天趁有空,总结一下,方便日后查阅。一、单链
表
链
表
是
C语言
中的一种...
赞
踩
article
(
Node
*)
malloc
(
sizeof
(
Node
))的理解...
Node
一般是前面写的一个结构体,像如在二叉树中typedef struct BinaryTree
Node
{ Tele...
赞
踩
article
【
数据结构
回顾】_
node
*
list
=(
node
*)
malloc
(
sizeof
(
node
))...
【代码】【
数据结构
回顾】_
node
*
list
=(
node
*)
malloc
(
sizeof
(
node
))
node
*
list
=...
赞
踩
article
数据结构
-C语言
链表
模拟_
p
=(
node
)
malloc
(
sizeof
(
node
))...
# include
# include <
malloc
.h># include
/...
赞
踩
article
简单
单链
表
的应用和基础性的编写_
node
*
node
=(
node
*)
malloc
(
sizeof
(no...
链
表
是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链
表
中的指针链接次序实现的。可以理解为一种更加...
赞
踩
相关标签
数据结构
链表
b树