|
サイズを指定した配列を作成するのに「配列初期化」関数を使用しています。その後収集されたデータを「部分配列置換」を用いて配列へ格納しています。xバイト使用するはずの配列を配置すると、実際には2xバイト使用していることに気が付きました。表示器を付属している場合はそのためにデータのコピーが作成されなければならないことは承知していますが、表示器はありません。データを表示器へ送ると実際には3xバイトが使用されます。「部分配列置換」が配列のコピーを作成しているのでしょうか?この関数はバッファを再使用するものと考えていたのですがどうでしょうか。
こうした動作を防ぐには「配列初期化」に制御器を配線してください。これによりメモリがあらかじめ配置されることがなくなります。制御器が配線されている場合、メモリはVI実行時まで配置されることはなく(VIを開いた時点ですべてのメモリが使用されることはありません)、またこのメモリ位置は変更可能であるためコピーは作成されません。
メモ: バッファ配置を表示しているときに変更点を確認するには、変更後にVIを保存してください。
「部分配列置換」はおそらくデータのコピーを作成しています。しかしこの問題の本当の原因は「部分配列置換」によるものではなく、「配列初期化」と定数によるものです。「配列初期化」への入力がすべて定数である場合(今回のケースはこれであると仮定します)、LabVIEWは配列全体を定数として扱います。LabVIEWが配列を定数として扱うため、VIを開いた時点でメモリが配置され、しかもこのメモリ配置場所は書き換えることができません。よってこのデータに「部分配列置換」を使用する場合、データの操作を可能にするためコピーが作成されなければなりません。
|