首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
jizzll_617398179
修改
文章:
900
阅读:
2713312
评论:
393
赞:
4691
好友
私信
个人主页
文章
900
原创
0
阅读
2713312
评论
393
赞
4691
原创
LabVIEW 程序的内存优化
2008-5-21 23:38
3871
4
4
分类:
测试测量
LabVIEW 程序的内存优化
转载与大家分享
http://user.qzone.qq.com/403995403/blog/24
( f9 C2 l8 @2 F4 g4 A' ]
$ w# ~( ]6 ^# V |& D
一. VI 在
当我们打开一个主VI时,主VI连同它的所有子VI的代码和数据段都会被调入内存。由于主VI的前面板一般情况下是打开的,它的前面板也就同时被调入内存。但是此时主VI的框图和子VI的前面板、框图并没有被调入内存。只有当主动查看主VI的框图或是打开子VI的前面板和框图时,它们才会被调入。
/ k% v6 n8 \: O4 N+ b; @
基于LabVIEW的这种内存管理的特性,我们在编写VI的时候可以通过以下方法来优化LabVIEW
第三,主VI的面板通常就是用户
第四,我们可以放心地在 VI 的前面板(对于非界面VI)和框图里添加图片,注释等信息来帮助你编写、维护LabVIEW程序,这些帮助信息不会在VI运行时占用内存。
1 l2 M: f4 ^, u+ {
二. 内存泄漏。
LabVIEW与C语言不同,它没有任何分配或释放内存的语句,LabVIEW可以
由于内存泄漏是
三. 缓存重用
LabVIEW程序主要是数据流
图1:简单的顺序执行程序
' b% p4 s# v' M# |/ I( e
如图1所示,程序对一个常量加1,然后将结果输出。
4 I% r% F- O7 c+ {( D# ]/ E
“+1”节点输出端有一个黑点,表示LabVIEW在此处开辟了一个缓存用于
图2:实现缓存重用
图2是经过我们优化后的VI,LabVIEW在“+1”节点处没有开辟新的缓存。LabVIEW中其它运算节点也有类似的性质。
9 k$ e* ^/ V4 v
2. 移位寄存器(Shift Register in the Loop Structure)
移位寄存器是LabVIEW内存优化中最为重要的一个节点,因为移位寄存器在循环结构两端的接线端是强制使用同一内存的。这一特性可以被用来通知LabVIEW在编译循环内代码时,重用输入输出缓存。
% R7 d6 q; B* C; I" R% K; R
图3: 对数组进行数值运算的顺序执行程序
让我们分析一下图3所示的程序:它首先构造了一个数组,然后对这个数组进行了几次数学运算。每一步运算,LabVIEW都要开辟一块缓存用以保存运算结果的副本。打开VI属性面板上的内存使用,可以看到这个VI大约会占用2.7M的内存空间。其实这些副本都是不必要的,每一步运算的结果都可以被保存到输入数据的内存空间。我们可以把所用的运算节点都放到一个子VI中,然后利用上一段提到的方法,使子VI中的代码缓存重用。还有一种方法,利用移位寄存器也可以实现缓存重用。
6 n6 }% h3 X% ^, n2 w w
7 G1 \/ f# W" [1 ~( i
图4: 利用移位寄存器实现缓存重用
如图4,我们可以将运算代码放在一个只运行一次的循环结构内,由于运算部分的输入和输出都与移位寄存器相连,这就相当于通知了LabVIEW,在运算的输入输出需要使用同一块缓存。因而,LabVIEW不再为每一步运算开辟新的缓存而是直接利用输入数据的缓存保存结果。打开VI属性面板上的内存使用,可以查看到这个VI的内存占用已经减少到了原来的六分之一。
^5 s1 F: Q" @4 j1 Z- o
3. 库函数调用节点(Call Library Node)
以传递整型
当选择了值传递时,库函数调用节点是不会改变该参数的内容的。如果我们在该库函数调用节点参数的左侧接线端引入输入数据,在输出端引出输出参数,那么输出数据其实是直接由输入数据引出的,LabVIEW不会在这个节点处开辟缓存。
8 @8 X; B1 Y' B, m: I* i# a" T
在指针传递方式时,LabVIEW则认为传入的数据会被改变。如果输入数据同时还要发往其它节点,LabVIEW会在此处开辟缓存,为输入数据作一个副本。选用指针传递方式,库函数调用节点的每一对接线端也同样是缓存重用的。就是说,库函数调用节点的输出值是直接存放在输入值的缓存空间的。
# M8 E W" g: C/ ~
如果一个参数只用作输出,我们通常会在库函数调用节点的输入接线端为它建立一个输入常数,这个常数的地址空间并不能直接被利用,它只是为库函数调用节点开辟的缓存而设置的初始值。不接输入常数,LabVIEW也会为此参数开辟一块缓存。但是,这样每次传入的参数值都会有变化。例如图5,库函数调用节点调用的函数
图5: 库函数调用节点
我们可以利用图5-c的
例子
证明LabVIEW某些节点是缓存重用的。每次运行5-c的例子,输出结果都会比前次增加2。这是因为示例中的参数接线端以及“+1”节点的输入输出端所使用的都是同一缓存。
# U$ u: H6 x8 f/ Y* Y
如果,库函数调用节点中某个参数只有输入链进去,没有输出。那么,LabVIEW 是假设你调用的函数不会修改这个参数的。LabVIEW 不会为这个数据做拷贝,它会重用这个数据的缓存。但如果你调用的函数修改的这个数据,你的程序就会面临这样一个潜在的危险:这个数据可能被程序其它部分的代码使用了,在那里,你看不出这个数据有任何被改动的地方,但它在运行时却不是你期望的数值。因为这个数据所在的缓存,被程序其它一个地方的一个库函数调用节点给重用了,而这个节点又偷偷摸摸的修改了它。
# X `1 }2 Z! i. w: V& M
在图5中的示例中,如果库函数调用节点输出的参数是个数组或者
字符
串,那么就必须为它相对应的输入端联入一个与输出数据大小一致的数组或字符串。否则,LabVIEW无法知道输出数据的大小,而使用默认分配的缓存空间很容易出现数组越界错误。
7 T2 Q$ V* f, [( @3 J; a4 d
四. 小结
缓存重用是LabVIEW内存优化的最重要的一个环节。精心设计的LabVIEW程序可以大大节约内存的占用,提高运行效率。但是,在编写完程序后再按照程序优化的技巧回头去优化一段已有的程序,这并不是一个好的编程方法。我们应该先熟悉理解优化的方法,在以后的
开发
过程中自然而然地将它们
应用
在编程中。
写原创有奖励!2024面包板原创奖励正在进行中
点赞(
4
)
收藏
分享到:
上一篇:
集成电路版图(layout)设计方法与实例
下一篇:
基于虚拟仪器的新型汽车电子测试平台
PARTNER CONTENT
换一换>
更多>
概伦电子:以开放心态共绘EDA产业新蓝图
概伦电子
2024-12-30
SK海力士将在CES2025亮相‘全方位面向AI的存储器供应商’的新蓝图
SK海力士
2025-01-03
文章评论
(
0
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
jizzll_617398179
修改
文章:
900
阅读:
2713312
评论:
393
赞:
4691
好友
私信
个人主页
文章
900
原创
0
阅读
2713312
评论
393
赞
4691
最新评论
更多
您好!请问这个ali_mqtt_init()函数是在哪里的
821411084_6 ...
评论博文
2025-1-19
【CH32V307评估板】+mqtt连接阿里云 ...
写得不错!
luckyzy2000
评论博文
2025-1-17
为什么负我不负她,PCB上的光学点是如何出 ...
欢迎分享!加油2025!
面包板社区 ...
评论博文
2025-1-17
2025年计划
最新
博文
中国大模型,有了“压舱石” ...
深度自然匿名化VS隐私保护与视觉完整 ...
手机购新补贴实施方案发布 京东将率先 ...
资料下载
本周热帖
晶体管电路设计-铃木雅臣(上).pdf ...
基于51单片机的万能遥控器设计论文 ...
基于51单片机的酒精浓度检测仪设计论 ...
基于51单片机的简易计算器设计任务书 ...
基于51单片机的简易计算器设计开题报 ...
2025,我在深圳一家元器件贸易公司“ ...
串行LED灯的频闪现象分析
桥式变换电路
altium Designer19使用问题20250115 ...
无感电阻器详解
最新资讯
芯语最新
CES 2025:对话西门子 EDA 首席执行官 ...
特斯拉上海超级工厂暂停部分产线,以 ...
PCI Express Gen5:自动化多通道测 ...
为什么紫外线固化对于高质量电子产品 ...
美成熟制程芯片低价冲击中国市场,中 ...
2024-2028年电动汽车“小三电”市场及 ...
特朗普发币,政治代币时代正式开启 ...
拜登发表告别演说,警告美国正形成“ ...
干掉CEO后,荣耀能平衡好董事会的矛盾 ...
专家访谈汇总:文旅行业迎来最强政策 ...
EE直播间
更多
Fabless100系列技术和应用直播 —实时控制、BMS:国产MCU迈向高性能应用
直播时间: 02月18日 10:00
高效协同与版本管理:Cliosoft助力现代芯片设计
直播时间: 02月26日 10:00
第三代功率半导体器件测试解决方案
直播时间: 03月06日 10:00
在线研讨会
更多
重塑机器人未来:揭秘创新芯片解决方案的颠覆力量
如何在隔离的状态监控系统中捕获同步数据
多路有光·精准不凡——KSW-SGM01模拟信号源发布会
迈来芯Triaxis® 3D磁传感器:汽车安全应用的优选方案
热门
推荐
如何提升高压系统的实时性能?
如何增强能源基础设施的实时控制?
您在使用示波器时面临的最大挑战是什么?
【有奖调研】泰克入门级示波器用户调研
我要评论
0
4
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/3
工程师写总结,送示波器、稳压电源、螺丝刀!
分享你的:职业生涯中故事、2024年年终总结、工作中的小故事,丰富多样的礼品等你哦!
面包板社区有奖活动汇总楼
1. DIY赢大奖!2. 写原创,有奖励!3.参与话题,奖励E币!4. 免费申领:开发板试用、书籍试读...
电子工程师DIY来分享,赢大疆无人机、小米手机、NAS存储、万用表 ...
展示您的 DIY 电子设计作品,社区将有丰富奖励送给您!
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
文章评论(0条评论)
登录后参与讨论