当前位置:网站首页>LabVIEW中局部变量和全局变量的分配
LabVIEW中局部变量和全局变量的分配
2022-08-01 07:10:00 【LabVIEW开发】
LabVIEW中局部变量和全局变量的分配
全局变量和局部变量是何时分配的?是否有办法通过编程释放其所占用的内存?
解答: 全局变量
全局变量存在于特殊的全局VI中,有别于应用程序的数据流。当从其他VI访问时,会在内存中复制一个变量空间,该空间会在调用VI从内存中释放时自动被释放掉。请注意复制较大的数组或大量的变量可能会消耗较长时间。
局部变量
当VI加载到内存中时,开始了对局部变量内存的分配。假如该VI是独立的,那么在运行时对局部变量分配内存,并在运行结束后销毁。假如局部变量在某子VI中声明,并且该子VI被主VI以静态方式载入,那么当主VI加载到内存中时就对该局部变量分配内存空间;在主VI从内存中卸载时,LabVIEW内存管理器会释放该局部变量所用资源。假如子VI动态载入(如下图所示),则在加载子VI时分配内存给局部变量,在子VI卸载时释放。

编辑
添加图片注释,不超过 140 字(可选)
释放内存
在LabVIEW中没有办法通过编程释放留给全局变量和局部变量的空间。但是可以在子VI已经运行完而主VI仍没有结束运行时释放子VI所占内存空间。在子VI运行结束后调用RequestDeallocation VI可以释放子VI所占用的内存资源。
有一个非常大的数组,但想保证在内存中只有一个拷贝.知道可以用移位寄存器,并用"ReplaceArray Subset" VI 保证只有一个拷贝。然而,想使之成为一个functionalglobal。因为,不能初始化这个移位寄存器,要找到一种方法来指定数组的类型。如果在循环中使用"InitializeArray" VI,将会导致内存中其他的拷贝。
解答:
举个例子,按照下面的尝试:
1) 关闭所有打开的VI,但保留LabVIEW打开。
2) 打开附件中的例子"TwoCopies in Memory.vi" 但不要运行它。
3) 打开Windows任务管理器,注意已经被LabVIEW使用的内存。
4) 保持缺省值不变,运行VI,注意到因为LabVIEW内存使用增加20 megabytes。这个缺省的设置导致一个含有1276900个双精度元素,即8个字节的数组,相当于大概10 megabytes。因为在内存中有两个数组拷贝,所以导致增加20megabytes。
另外一个方法,可以观察LabVIEW缓存的分配,通过选择Tools » Advanced » Show Buffer Allocations。应该看到一个分配在移位寄存器,另外一个拷贝在"Initialize Array" VI。
可通过"ReshapeArray" VI替换"Initialize Array" VI来指定数组的类型。通过这个方法,始终是对同一个数组进行操作,而不会在内存中造成额外的拷贝。
可通过下面的步骤看到这个效果:
1) 关闭所有打开的VI,保留LabVIEW打开。
2) 打开下面附件的例子程序"OneCopy in Memory.vi"但不要运行它。
3) 打开Windows任务管理器,并注意LabVIEW使用的内存。
4) 保留缺省值,运行VI。并注意内存使用大概增加了10 megabyte。 在这种情况下,只有一个10 megabyte 数组的拷贝。
另外一个方法,可以通过在LabVIEW中看内存的分配,通过选择Tools » Advanced » ShowBuffer Allocations。应该看到只是在给移位寄存器分配了内存。
LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序
上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系我们。
LabVIEW中局部变量和全局变量的分配 - 北京瀚文网星科技有限公司 (bjcyck.com)
边栏推荐
- 曲柄滑块机构运动分析和参数优化
- Fist game copyright-free music download, League of Legends copyright-free music, can be used for video creation, live broadcast
- 【一句话攻略】彻底理解JS中的回调(Callback)函数
- 表的创建、修改与删除
- 测试工具(四)Jenkins环境搭建与使用
- LeetCode 0149. 直线上最多的点数
- MVVM project development (commodity management system 1)
- Xiaobai's 0 Basic Tutorial SQL: An Overview of Relational Databases 02
- Create, modify and delete tables
- 零代码网站开发利器:WordPress
猜你喜欢
Sound Signal Processing Fundamental Frequency Detection and Time-Frequency Analysis
Golang: go static file processing
MVVM项目开发(商品管理系统一)
Detailed explanation of the crawler framework Scrapy
crypto-js使用
MATLAB程序设计与应用 2.5 MATLAB运算
Matlab simulink particle swarm optimization fuzzy pid control motor pump
How to use Photoshop to composite star trail photos, post-processing method of night sky star trail photos
Dbeaver connect the MySQL database and error Connection refusedconnect processing
Vim扩展内容
随机推荐
my creative day
Dart 异常详解
自制一款远程控制软件——VeryControl
weight distribution
测试工具(四)Jenkins环境搭建与使用
Dbeaver connect the MySQL database and error Connection refusedconnect processing
The BP neural network based on MATLAB voice characteristic signal classification
支付宝如何生成及配置公钥证书
matlab simulink 粒子群优化模糊pid控制的电机泵
The Bean's life cycle
如何使用Photoshop合成星轨照片,夜空星轨照片后期处理方法
电磁兼容简明教程(6)测试项目
仿牛客网讨论社区项目—项目总结及项目常见面试题
Golang: go to connect and use mysql
信息系统项目管理师必背核心考点(五十六)配置控制委员会(CCB)的工作
2022杭电多校第二场1011 DOS Card(线段树)
Bean的生命周期
最小生成树
目标检测概述-上篇
05-SDRAM:仲裁