LabVIEWのローカル変数とグローバル変数のメモリ確保・解放

更新しました Dec 16, 2020

使用製品

ソフトウェア

  • LabVIEW Base
  • LabVIEW Student
  • LabVIEW Full

問題

メモリ管理の為、グローバルとローカル変数がいつメモリ確保・解放されるかを知る必要があります。プログラム的にメモリを開放する方法はありますか?

解決策

ローカル変数

ローカル変数のメモリ確保は、変数を含むVIがメモリにロードされた際行われます。スタンドアローンVI(サブVIを含まないVI)の場合、ローカル変数はプログラム実行時にメモリ確保され、実行完了後にメモリ解放されます。ローカル変数を含むサブVIがメインVIで配置されている場合、ローカル変数のメモリ確保・解放はメインVIの実行時と実行完了後に行われます。ローカル変数を含むサブVIが以下のイメージ通りに、メインVIから動的に呼ばれた際、ローカル変数のメモリ確保・開放はサブVIが呼ばれた・解放された際、行われます。

グローバル変数

グローバル変数はグローバルVIに存在し、アプリケーションには存在していません。グローバル変数が他のVIに呼ばれた際、グローバルVIの変数がコピーされてからメモリにロードされます。変数を呼び出したVIがメモリ解放された際、変数のコピーもメモリ解放されます。大きな配列等、大きい変数をコピーする際時間がかかることもありますのでご注意ください。

メモリ解放

グローバル変数とローカル変数用に確保されたメモリをプログラム的に開放する方法はありませんが、上位VIのプログラムが完了する前にサブVIのメモリ解放をすることはできます。サブVIが完了後、上位VIで「メモリ解放要求」を実装するこにより、サブVIのメモリ解放できます。

追加情報

LabVIEW 2012以降、FP.Openプロパティノードはサポートされていません。以下のように、プロパティノードの代わりにFP.Openインボークノードを使用する必要があります。