Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
代码优化
性能测试
算法优化
memcpy和rt_memcpy执行效率对比
发布于 2024-05-24 15:08:39 浏览:1257
订阅该版
[tocm] 目前常用的内存操作主要有内存复制和赋值。内存复制包括使用`memcpy`和`rt_memcpy`,内存赋值则使用`memset`和`rt_memset`。`memcpy`和`memset`是C标准库提供的内存内存操作函数,`rt_memcpy`和`rt_memset`则是RT_Thread提供的内存操作函数。 分别对1kB、2kB、4kB和8kB数据量下的`memcpy`和`memset`进行测试,测试程序在同一线程中进行,线程时间片为10ms,每次接收到信号量后执行一次测试。测试程序可能被其它线程定时打断。 ### memcpy测试 |**memcpy(单位:us)**||均值|标准差/均值| |-|-|-|-| |1k|memcpy|40.5129|0.068181| ||rt_memcpy|43.10005|0.064184| |2k|memcpy|76.39907|0.036257| ||rt_memcpy|133.2995|0.019073| |4k|memcpy|193.2759|0.011688| ||rt_memcpy|214.5511|0.008173| |8k|memcpy|349.3828|0.003129| ||rt_memcpy|407.9885|0.002638| ![memcpy.png](https://oss-club.rt-thread.org/uploads/20240524/011a1c6cd467656baef98a8e4971c29e.png.webp) 从测试数据可以看出: - `memcpy`的效率高于`rt_memcpy`,2k时效率提升明显(约为74%); - `rt_memcpy`的稳定性高于`memcpy`,耗时波动更小; - 刚启动时,各项测试的值都较小,这可能是因为,中断的执行时间随芯片运行逐渐增加,导致后续测试中存在被中断打断的情况,表现为启动时测试时间短,平稳后测时间长; ### memset测试 |**memset(单位:us)**||均值|标准差/均值| |-|-|-|-| |1k|memset|2.47117|0.436069| ||rt_memset|3.365812|0.314665| |2k|memset|4.654612|0.227716| ||rt_memset|6.345583|0.166777| |4k|memset|8.990387|0.117807| ||rt_memset|12.23285|0.086646| |8k|memset|17.48272|0.06071| ||rt_memset|23.92088|0.044405| ![memset.png](https://oss-club.rt-thread.org/uploads/20240524/48d6887439dfab9d817d7bfde1ad7f24.png.webp) 从测试数据可以看出: - `memset`效率高于`rt_memset`,且各个数据量下效率提升基本一致; - `rt_memset`的稳定性高于`memset`,耗时波动更小; ### 其它分析 - rt_memset和rt_memcpy的代码结构几乎一样,但执行时间差异很大。从代码分析来看,rt_memset不用去读取内存,而直接使用寄存器获取所需赋值,而rt_memcpy则需要不断从内存读取数据。这应该是二者时间差异的主要原因。由此可见,寄存器和ram读取对速度的影响是很大的。
11
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
dekira
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
32位的无符号整数全部位颠到的算法优化
2
算法运行时所用的内存空间
3
cpu利用率的值不会改变
4
rt-thread studio编译器代码优化问题?
5
哪种行业对嵌入式代码质量要求no warning 呢?
6
rtthread线程切换时间大约多少
7
RT-Thread支持tracy profiler之类的性能剖析工具么
8
rt-smart 怎么测试运行速度呀?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部