搜索
查看
编辑修改
首页
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
【c语言】:扫雷游戏(超详细教程)_c语言扫雷游戏
2
【微信小程序】基础篇 -- 注册小程序账号&安装开发者工具(一)_微信开发者工具
3
Vue进阶(四十七):面试必备:2024 Vue经典面试题总结(含答案_vue进阶面试题
4
VMware下的虚拟机网络设置(NAT、桥接、仅主机)_vmware虚拟机nat网络设置
5
STL中的所有算法(70个) _stl抑震加快收敛
6
Win11关于SQL SERVER 2008导入Excel表格出现的错误——未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0“提供程序。(System.Data)(亲测有效)_未在本地计算机上注册“microsoft.ace.oledb.12.0”提供程序。 (system.
7
【Python】神经网络回归预测模型,Python代码实现_神经网络回归预测 python
8
ubuntu 内网搭建服务器的一些配置,完美解决https、http、curl、wget、yum 无法访问的问题_ubuntu内网yum
9
在Spring框架中,可以使用`@RequestHeader`注解来绑定请求报头的属性值_spring中request的header是何时赋值的
10
ACL2024 | OceanGPT-沧渊:面向海洋科学任务的大型语言模型初探
当前位置:
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复位。
本文内容由网友自发贡献,转载请注明出处:
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树