我和LabVIEW(word版)——一个NI工程师十年的编程经验 43VI 中的数据空间.docVIP

  • 4
  • 0
  • 约1.28千字
  • 约 2页
  • 2019-07-03 发布于江西
  • 举报

我和LabVIEW(word版)——一个NI工程师十年的编程经验 43VI 中的数据空间.doc

VI 中的数据空间 LabVIEW 由于比其它语言采用了更多的值传递方式,这必然会影响它的运行效率,也使得 LabVIEW 在这方面要采取一些其它语言不需要的应对措施,尽量提高效率。优化之一是子 VI 中局部变量使用的内存的分配方式。 C 语言中,函数的局部变量存在于栈中。在调用某一函数时,程序才为这个子函数开辟一块空间作为用于保存函数中局部变量的栈。子函数运行结束后,栈空间即被释放。下次再调用这个函数,程序会重新非配栈空间,这时的空间可能与上次分配的并不在同一内存地址。为了节约反复开辟空间的时间,LabVIEW VI 中并没有采用栈的方式。一般情况下,静态调用 VI,每个 VI 专门有一块存数据的数据空间,这块数据空间所在的内存地址在 VI 每次运行时是不会变化的,尤其是上次 VI 运行后所留有的数据还可以被使用。 LabVIEW 这种做法最大的好处是节约了大量开辟、回收内存的开销;但它也有个严重的缺陷,这也是其他语言不采用类似措施的原因:每次函数调用没有独立的数据区,因此无法实现递归调用(LabVIEW 静态调用的情况下)。经过权衡,LabVIEW 最终牺牲了递归来换取运行效率。 对于一般的子 VI(非可重入的),不论在程序的哪里被调用时,都使用的是同一块数据区。如果主 VI 上有两个并排被调用的同一个子 VI(如图1所示的两个 Delay V

文档评论(0)

1亿VIP精品文档

相关文档