首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025汽车电子峰会
2025 AI+IoT 生态大会
2025MCU及嵌入式论坛
直播:介电常数那些事儿
汽车全域ADAS方案
行业及技术活动
研华嵌入式论坛(深圳 武汉 苏州)
嵌入式设计资源库
杂志免费订阅
EE直播间
白皮书
小测验
在线研讨会
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
jizzll_617398179
修改
文章:
900
阅读:
2815445
评论:
393
赞:
5612
好友
私信
个人主页
文章
900
原创
0
阅读
2815445
评论
393
赞
5612
原创
LabVIEW 程序的内存优化
2008-5-21 23:38
4020
6
6
分类:
测试测量
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程序可以大大节约内存的占用,提高运行效率。但是,在编写完程序后再按照程序优化的技巧回头去优化一段已有的程序,这并不是一个好的编程方法。我们应该先熟悉理解优化的方法,在以后的
开发
过程中自然而然地将它们
应用
在编程中。
写原创有奖励!2025面包板原创奖励正在进行中
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
点赞(
6
)
收藏
分享到:
上一篇:
集成电路版图(layout)设计方法与实例
下一篇:
基于虚拟仪器的新型汽车电子测试平台
PARTNER CONTENT
换一换>
更多>
文章评论
(
0
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
jizzll_617398179
修改
文章:
900
阅读:
2815445
评论:
393
赞:
5612
好友
私信
个人主页
文章
900
原创
0
阅读
2815445
评论
393
赞
5612
最新评论
更多
https://namobharat.zohodesk.in/portal/en/kb/articles/51-c%C3%B3mo-puedo-llamar-a-delta-airlines-en-per%C3%BA-delta-tele ...
用户1751393 ...
评论博文
2025-7-2
520订单暴涨303%背后:滴滴快送杀入即时配 ...
https://namobharat.zohodesk.in/portal/en/kb/articles/51-c%C3%B3mo-puedo-llamar-a-delta-airlines-en-per%C3%BA-delta-tele ...
用户1751393 ...
评论博文
2025-7-2
520订单暴涨303%背后:滴滴快送杀入即时配 ...
https://namobharat.zohodesk.in/portal/en/kb/articles/51-c%C3%B3mo-puedo-llamar-a-delta-airlines-en-per%C3%BA-delta-tele ...
用户1751393 ...
评论博文
2025-7-2
520订单暴涨303%背后:滴滴快送杀入即时配 ...
最新
博文
使用知用电流探头时示波器如何设置 ...
世界对氮化镓功率器件的误解 ...
DeepSeek、豆包向左,盘古大模型向右 ...
资料下载
本周热帖
初级无刷电机设计学习资料 ...
无刷电机资料大全(基本原理+接线方法 ...
无刷电机原理图大全
【伺服驱动器用户手册、电熔胶调试指 ...
【说明书、用户手册】富士伺服系统 ...
一文搞懂UVA、UVB、UVC、UVD的区别与 ...
从开关速度看MOSFET在高频应用中的性 ...
元器件选型的基本要求
基于SiC的熔丝保护高压电气系统 ...
《电感应用分析精粹:从磁能管理到开 ...
最新资讯
芯语最新
哪吒汽车继续“自救”,公开招募意向 ...
SEMI预测:2030年半导体行业将面临100 ...
41 家企业同日获受理,摩尔线程、沐曦 ...
传大联大计划重组?回应来了…… ...
借助 PSFB 转换器中的有源钳位实现 ...
比亚迪销量突破38万辆!鸿蒙智行交付 ...
嵌入式项目管理流程
2025年6月及上半年汽车新势力销量排名 ...
朱晓彤,接管特斯拉全球工厂 ...
行业首发!TCL华星发布显示领域首款强 ...
EE直播间
更多
全面搞懂介电常数那些事儿
直播时间: 07月03日 10:00
在线研讨会
更多
利用先进精密仪器仪表解决方案,优化研发并加快产品上市
AI 巨型芯片,性能越强,测试越难,如何破局?
Mercury基于展频技术的医疗时钟EMI抑制方案
ST 在大功率热管理系统中的电机控制系统方案(AI 数据中心/暖通空调/电池储能系统/变频制冷)
热门
推荐
TI 创新雷达传感技术牛在哪?
WAIC独家议程公开!Arm携阿里云/小鹏/联想揭秘AI落地密码
自动驾驶的半导体基石
【技术公开课】四大精密仪器方案,破解电子研发“速度与成本”难题
我要评论
0
6
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/5
E币兑换「你的愿望清单,我们来买单!」
为了把E币兑换变成更懂你们的“小确幸”,我们决定开启「社区心愿兑换」计划!想要什么告诉我们,我们给您买
2025第1期拆解活动:赢示波器、运动相机、热像仪等!
示波器、影石运动全景相机、大疆无人机、高清红外热成像仪;树莓派5等等
【下载】电源设计工程师指南(共542页)
本书共542页,深受设计工程师欢迎,作为硅基与第三代半导体的实用工具书,本手册将成为专业技术人员实现优化功率和小信号开关、电源转换和管理的必备指南。
【2025面包板社区内容狂欢节】发帖/回帖赢25万E币!
活动时间:即日起——2025年全年(发完20万E币为止!)
社区内容发布、审核与管理!
严厉打击刷流量发广告等行为
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025汽车电子峰会
2025 AI+IoT 生态大会
2025MCU及嵌入式论坛
直播:介电常数那些事儿
汽车全域ADAS方案
行业及技术活动
研华嵌入式论坛(深圳 武汉 苏州)
嵌入式设计资源库
杂志免费订阅
EE直播间
白皮书
小测验
在线研讨会
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
文章评论(0条评论)
登录后参与讨论