运用过惯例C言语的朋友都知道,C答应编程者,请求内存,再分配内存和开释内存,这为编程者供给了极大的便利的一起,也造成了十分多的危险,能够说,C程序的运转中许多不可思议的过错都和内存走漏有关.程序或许接连运转几个小时没有任何问题,但忽然就产生过错,关于一个比较复杂的程序,追寻内存走漏十分困难,常常要借用第三方的专门的内存剖析东西.
C的内存过错最多的是两种状况:
1.数组越界:
int Array[10];//体系主动分配10*4BYTE的空间
for(int i=0;i<100;i++) Array[i]=i; //写入前10个元素时没有问题,超越10个,C会持续向接连的内存空间写数据
假如该内存空间无用,没有问题.假如这段内存空间被体系或许其它应用程序占用,过错的写入或许会导致体系溃散,常常提示的是产生意外过错,比较新的操作体系一般不会溃散,会提示内存写过错,应用程序退出.
2.分配内存没有开释(内存走漏)
int *p;//界说整型指针
p=(int *)malloc(100*sizeof(int)); //请求100*4个字节的内存
if(p==NULL) //体系无法分配,退出程序
{
return (errro);
}
free(p); //开释请求的内存空间 假如没有这个句子,重复调用这段程序,导致占用的内存空间越来越多.
labview则彻底不同,它的内存分配是由LV的内存办理器主动完结的,因而不存在用户内存开释的问题,也不存在数组越界的问题,既然如此,评论LV的内存办理有意义吗?
答案是:十分重要.常常有人诉苦,LV的运转速度缓慢,功能很差,这儿首要的原因都是内存运用不当的原因.
LV随时都在不断地进行内存分配,再分配和开释的作业,只不过这些作业是由LV内存办理器主动进行的,对用户来说是在后台进行的,是不受用户操控的.一起,内存办理器的作业是十分深重和缓慢的,它的许多无意义的作业将会导致程序运转功率的急剧下降.
改善LV内存运用的最好办法是杰出的编程风格.
一个VI占用的内存空间分红四个部分.
1.PANEL 前面板
2.BLOCK DIAGRAM 程序框图
3.CODE SPACE 代码空间
4.DATA SPACE 数据空间
代码空间指的是框图编译后构成的机器码所占的空间.
数据空间包含前面板操控器和指示器的值和默认值,常量和动态界说的数据.
当翻开一个VI的时分,面板空间,代码空间和数据空间载入内存,该VI的子VI的代码空间和数据空间载入内存.
假如挑选显现程序框图,则程序框图空间也载入内存.
能够看出,当翻开一个VI时,LV只载入需求的部分,自VI只载入代码空间和数据空间.所以不必要考虑子VI的前面板和程序框图.如上图,假如把主VI的部分分红多个SUBVI,能够有效地节省内存的运用.由于SUBVI一方面不再需求前面板和程序框图,只要代码空间和数据空间载入内存,并且在需求的时分,LV能够回收数据空间内存并从头运用.当咱们翻开一个十分大的,包含很少SUBVI的程序,速度会十分缓慢,相反,一个很大的包含许多的SUBVI的程序翻开速度十分快,便是这个原因.
当咱们编写VI的时分常常要检查它的内存运用状况,有几种办法:
一.经过ABOUT对话框,能够查到操作体系为LV分配的悉数内存.悉数内存包含翻开的VI占用的和LV自身占用的.在翻开LV之后,记录下这个值(LV自身占用的),然后修改你的VI,再检查ABOUT对话框,他们的差便是你的VI占用的内存,这个办法能够大约估量您的VI的内存运用状况
.
二:经过FILE菜单中的show vi property(CTRL+I)来检查当时VI的内存运用状况.
三.经过Profile Window 来检查.
总结以上内容,得出几个关键:
.由于LV操控内存办理,因而很难知道LV的内存是怎么分配的.
.杰出的编程风格会改善LV的内存运用状况.
.VI的内存运用分红PANEL,BLOCK,CODE,DATA四部分.
下面的部分详细剖析这四部分的内存是怎么运用的.
首要看看PANEL和BLOCK,这两个部分是占用内存的首要部分.
前面板首要是由操控器(control)和指示器(indicator)组成的,每个操控器和指示器都有自己的数据复制,在修改的状况下咱们能够随意更改操控器和指示器的值,即便他们经过数据流连在一起,只要不运转,指示器没有新的数据流到来,它始终保持本来的值.操控器和指示器的数据复制称作操作数据,由于只用经过具体操作才干改动它的值,框图的中的数据(数据流)称作履行数据,由于只要VI运转时分才起作用.能够了解成连线上的数据.