LabVIEWは制御器、表示器、ワイヤ、およびその他のオブジェクトのデータをメモリに保存します。

ブールデータ

ブールデータは8ビット値として保存されます。値が0の場合、ブール値はFALSEです。0以外の値はすべてTRUEで表されます。

バイト整数

バイト整数は、符号付きおよび符号なしの8ビット形式です。

ワード整数

ワード整数は、符号付きおよび符号なしの16ビット形式です。

倍長整数

倍長整数は、符号付きおよび符号なしの32ビット形式です。

4倍長整数

4倍長整数は、符号付きおよび符号なしの64ビット形式です。

固定小数点

固定小数点は、符号付きおよび符号なしの64ビット形式です。LabVIEWでは拡張ビット数が小さい場合でも、固定小数点数は64ビットに拡張されます。

単精度浮動小数

単精度浮動小数点数は32ビットIEEE単精度形式です。

32ビットIEEE単精度浮動小数点形式のダイアグラム。

倍精度

倍精度浮動小数点数は64ビットIEEE倍精度形式です。

64ビットIEEE倍精度浮動小数点形式のダイアグラム。

拡張

拡張精度浮動小数点数は80ビットIEEE拡張精度形式です。

メモ コンピュータのプロセッサによっては、拡張精度浮動小数点数に、64、96、および128ビットIEEE拡張精度形式を使用できます。ほとんどのIntelおよびAMDプロセッサは80ビット形式を使用します。

80ビットIEEE拡張精度浮動小数点形式のダイアグラム。

単精度複素数

複素単精度浮動小数点数は、32ビットIEEE単精度形式の実部と虚部の値で構成されます。

実部と虚部を含む複素単精度浮動小数点形式のダイアグラムです。

倍精度複素数

複素倍精度浮動小数点数は、64ビットIEEE倍精度形式の実部と虚部の値で構成されます。

実部と虚部を含む複素倍精度浮動小数点形式のダイアグラムです。

拡張複素数

複素拡張精度浮動小数点数は、IEEE拡張精度形式の実部と虚部の値で構成されます。

実部と虚部を含む複素拡張精度形式のダイアグラムです。

浮動小数点および複素数について、「s」は符号ビット (0は正の値、1は負の値)、「exp」はバイアス指数 (底2)、仮数は[0,1]範囲の数値です。

タイムスタンプ

LabVIEW 7.0 よりも新しいバージョンの LabVIEW では、各タイムスタンプは 4 進符号付き整数と 4 進符号なし整数の 2 つの部分に保存されます。

  • 最初の部分、四分符号付き整数 (I64) は、時間帯に依存しないグリニッジ標準時の1904年1月1日金曜日午前0:00 (01-01-1904 00:00) から経過した完了秒数です。グレゴリオ暦を使用し、うるう秒を無視します。
  • 2番目の部分、4進符号なし整数 (U64): 秒の正の小数部分を表します。

単一のタイムスタンプは、これら2つの64ビットコンポーネントの合計です。これらの2つのコンポーネントは、64ビット基数で単一の符号付き128ビット固定小数点数を形成すると解釈できます。

128ビット固定小数点数 (秒および秒の分数) のダイアグラム。

配列

配列はハンドルまたはポインタに対するポインタとして保存され、配列の各次元のサイズを32ビット整数で表し、その後にデータが続きます。ハンドルが0の場合、配列は空になります。プラットフォームによってはアライメント制限があるため、データの最初の要素が正しくアライメントが行われるように、2~3バイトのパディングが次元サイズに続くことがあります。LabVIEW配列を使用する共有ライブラリを書き込む場合は、ハンドルのサイズを調整する必要がある場合もあります。

以下の図は、単精度浮動小数点数の1D配列を示します。左側の10進数は、配列が開始するメモリ位置のバイトオフセットを表します。

バイトオフセットを持つ単精度浮動小数の1D配列のダイアグラム。

以下の図は、16ビット整数の4次元配列を示します。

バイトオフセットのある16ビット整数の4D配列のダイアグラム。

LabVIEWでは、メモリ内で1Dおよび2D配列のアライメントが行われます。これは、線形代数の演算および行列データタイプに関連する演算のパフォーマンスを向上させます。

文字列

文字列はストラクチャに対するポインタとして保存され、以下の図に示すとおり、1D配列のバイト整数 (8ビット文字) が続く4バイト長の値を含みます。ストラクチャに対するポインタであるハンドルがNULLの場合、文字列は空の文字列として扱われます。この空の文字列は、長さの値が0の文字列と同じです。LabVIEWでは終了文字ではなく、長さの値を使用して文字列の終端を指定するので、文字列の任意のポイントでNULL文字、ASCII文字0を含むすべての文字を埋め込むことができます。LabVIEWの文字列をC文字列として外部コードに渡すと、そのコードは埋め込まれている最初のNULL文字で終了すると解釈され、問題が発生します。

次元サイズと文字配列を含むLabVIEW文字列ハンドルのダイアグラム。

パス

LabVIEWのパスは、パスタイプとパスコンポーネントを含む不透明なデータ構造に対するポインタです。パスの種類は、絶対パスでは0、相対パスでは1、UNC (汎用名前付け規則―Universal Naming Convention) パスでは3です。UNCパスはWindowsのみで発生し、最初の構成要素として、ドライブ名ではなく\\<machine name>\<share name>と表記されます。パスの種類で、その他の値はすべて無効パスを示します。

パスに関する情報にアクセスするには、以下の関数を使用します。

  • FDepth()
  • FDirName()
  • FIsAPath()
  • FIsAPathOfType()
  • FIsEmptyPath()
  • FNamePtr()
  • FVolName()

パスに要素を追加するには、以下の関数を使用します。

  • FAddPath()
  • FAppendName()

新規にパスを作成するには、以下の関数を使用します。

  • FNotAPath()
  • FPathCpy()
  • FEmptyPath()
  • FMakePath()
  • FRelPath()

FDestroyPath()」関数を使用して、パスを破棄します。

以下の関数を使用して、パスをテキスト形式(またはテキスト形式をパス)に変換します。

  • FFileSystemStringToPath()
  • FPathToFileSystemDSString()
  • FPathToText()
  • FTextToPath()
  • ConvertPathToPlatformIndependentText()
  • ConvertPlatformIndependentTextToPath()

2つのパスを比較するには、以下の関数を使用します。

  • FPathCmp()
  • FPathCmpLexical()

関連情報

共有ライブラリでLabVIEW管理関数を使用する

クラスタ

LabVIEWは、クラスタ順位に従ってさまざまなデータタイプのクラスタ要素を保存します。クラスタ順序を表示したり、修正したりするには、クラスタの枠線を右クリックしてショートカットメニューからクラスタ内の制御器の並び替えを選択します。スカラデータをクラスタで直接的に保存し、それを間接的に配列、文字列、パスにクラスタで保存します。特定のプラットフォームではアライメント制限があるため、次のクラスタの始まりで正しくアライメントされるように、クラスタの終わりに複数バイトのパディングを追加することがあります。クラスタの配列を使用する共有ライブラリを書き込む際に、配列を参照するハンドルのサイズを調整する場合は、このパディングを考慮する必要があります。

クラスタのメモリのレイアウトは実行しているプラットフォームによって異なります。クラスタ要素がアドレスの境界で揃うように、要素間がパディングされることがあります。アドレスの境界は自然境界の概念に基づいています。データアドレスの始まりがデータサイズの倍数である場合、そのデータは自然な境界でアライメントされているといえます。たとえば、4バイト整数は、4の倍数のアドレスで始まる場合に自然境界にアライメントされているといえます。多くのコンパイラには、これらの境界に上限があり、それ以降は制約が緩和されます。たとえば、8バイト整数は4バイトの境界でアライメントできます。LabVIEWを実行するプラットフォームについて、アライメントの制限は以下のとおりです。

  • (Phar Lap ETS) データのアライメントは、1バイトの境界に対してのみ行われます。
  • (macOS 64ビットおよびLinux 64ビット) データは8バイトの境界まで自然にアライメントされます。
  • (Windows 64ビットおよびVxWorks) データは8バイトの境界まで自然にアライメントされます。

すべてのプラットフォームでは、クラスタは、多くの場合、制限付きでアライメントが行われた要素のアライメントを採用します。

以下の表は、16ビット整数、倍精度浮動小数点、拡張精度浮動小数点数、配列、8ビット符号なし整数を含むクラスタを表します。各行には、メモリアドレスとそれに対応する要素と要素サイズが含まれます。

  • (Phar Lap ETS) データのアライメントは1バイトの境界に対してのみ行われるため、次のクラスタのメモリアドレスは17になります。
    メモリアドレス 要素 サイズ (バイト)
    0: I16整数 2
    2: EXT浮動 10
    12: 配列のハンドル 4
    16: U8整数 1
  • (Windows 64ビット、macOS 64ビット、Linux 64ビット) データは8バイトまでの境界に自然にアライメントされるため、次のクラスタが32になるように、U8整数の後に7バイトのパディングが追加されます。
    メモリアドレス 要素 サイズ (バイト)
    0: I16整数 2
    2: EXT浮動 10
    12: パディング 4
    16: 配列のハンドル 8
    24: U8整数 1
    25: パディング 7
  • (VxWorks ) データは8バイトの境界まで自然にアライメントが行われるため、次のクラスタが40になるように、U8整数の後に7バイトのパディングが追加されます。VxWorksはEXT浮動を倍長倍精度として実装することに注意してください。
    メモリアドレス 要素 サイズ (バイト)
    0: I16整数 2
    2: パディング 6
    8: EXT浮動 16
    24: 配列のハンドル 8
    32: U8整数 1
    33: パディング 7

LabVIEWは、他のクラスタの中に埋め込まれたクラスタを間接ブロックなしでラインに直接保存します。LabVIEWは配列、文字列、パスを間接的に保存します。

以下の図は、同じ方法でデータを保存する2つの異なるクラスタを示します。

LabVIEWで数値制御器と配列を持つ2つのクラスタ。 LabVIEWで2つのSGL浮動小数点数と配列ハンドルを持つクラスタの図。

波形

波形はクラスタと同じ方法で保存されます。

Refnum

refnumは符号付き32ビット整数として保存されます。

バリアント

バリアントは、LabVIEWの内部データ構造に対するハンドルとして保存されます。バリアントデータタイプは4バイトで構成されます。

関連する概念

平坦化されたデータ

タイプデスクリプタ