LabVIEW가 메모리에 데이터를 저장하는 방법
- 업데이트 날짜:2025-08-27
- 6분 (읽기 시간)
LabVIEW는 객체의 데이터 타입에 따라 컨트롤, 인디케이터, 와이어, 기타 객체를 위해 메모리에 데이터를 저장합니다.
불리언 데이터
LabVIEW는 불리언 데이터를 8비트 값으로 저장합니다. 값이 제로이면 불리언 값은 거짓입니다. 0이 아닌 모든 값은 참 (TRUE)을 나타냅니다.
바이트 정수
바이트 정수 숫자는 8비트 포맷의 부호 있는 정수와 부호 없는 정수를 가지고 있습니다.
워드 정수
워드 정수 숫자는 16비트 포맷의 부호 있는 정수와 부호 없는 정수를 가지고 있습니다.
롱 정수
롱 정수 숫자는 32비트 포맷의 부호 있는 정수와 부호 없는 정수를 가지고 있습니다.
쿼드 정수
쿼드 정수 숫자는 64비트 포맷의 부호 있는 정수와 부호 없는 정수를 가지고 있습니다.
고정 소수점
고정 소수점 수는 64비트 포맷의 부호 있는 정수와 부호 없는 정수를 가지고 있습니다. LabVIEW는 확장된 비트가 유효숫자 값이 아니더라도 고정 소수점 수를 64비트로 부호 확장합니다.
단정도
단정도 부동소수는 32비트 IEEE 단정도 포맷을 가지고 있습니다.
배정도
배정도 부동소수는 64비트 IEEE 배정도 포맷을 가지고 있습니다.
확장형
확장형 부동소수는 80비트 IEEE 확장형 포맷을 가지고 있습니다.
단정도 복소수
단정도 복소수 부동소수는 32비트 IEEE 단정도 포맷의 실수와 허수로 구성되어 있습니다.
배정도 복소수
배정도 복소수 부동소수는 64비트 IEEE 배정도 포맷의 실수와 허수로 구성되어 있습니다.
확장형 정밀도 복소수
확장형 복소수 부동소수는 IEEE 확장형 포맷의 실수와 허수로 구성되어 있습니다.
부동소수와 복소수에서, s는 부호 비트(양의 값의 경우 0, 음의 값의 경우 1)이고, exp는 밑이 2인 편중 지수이고, 가수는 [0,1] 범위에 있는 숫자입니다.
타임스탬프
LabVIEW는 타임스탬프를 두 개 배정도 수의 클러스터로 저장합니다. 첫 번째 배정도 수는 표준 시간대와 관계없는, 세계시 [01-01-1904 00:00:00], 1904년 1월 1일 금요일 오전 12시 이후부터 경과된 초의 수를 나타냅니다. 두 번째 배정도 수는 초의 소수 단위를 나타냅니다.
배열
LabVIEW는 배열을 핸들 또는 포인터에 대한 포인터로 저장하는데, 이 핸들이나 포인터는 데이터 앞에 배열의 각 차원의 크기를 32비트 정수로 가지고 있습니다. 핸들이 0이면 배열은 비어 있습니다. 특정 플랫폼의 정렬 제한 때문에, 데이터의 첫 번째 원소가 올바르게 정렬되도록 차원 크기 뒤에 몇 바이트가 채워지는 경우도 있습니다. LabVIEW 배열을 사용하는 공유 라이브러리를 쓰는 경우, 핸들의 크기를 조정해야 할 수도 있습니다.
다음 그림은 단정도 부동소수의 1D 배열을 보여줍니다. 왼쪽의 십진수는 메모리에서 배열이 시작하는 곳의 바이트 오프셋 위치를 나타냅니다.
다음 그림은 16비트 정수의 4D 배열을 보여줍니다.
LabVIEW에서는 1D와 2D 배열이 메모리에 정렬됩니다. 이는 선형 대수 연산 및 행렬 데이터 타입과 연관된 연산 수행에 도움을 줍니다.
문자열
다음 그림에서 보는 것처럼, LabVIEW는 문자열을 4바이트 길이 값 뒤에 바이트 정수(8비트 문자)의 1D 배열이 포함된 구조의 포인터로 저장합니다. 핸들이나 구조의 포인터가 널인 경우 LabVIEW는 문자열을 빈 문자열로 다루는데, 이것은 길이 값이 제로인 문자열과 같습니다. LabVIEW는 문자열의 끝을 결정할 때 종료하는 문자 대신 길이 값을 사용하기 때문에, 문자열의 어느 포인트에나 널 문자, ASCII 문자 0을 포함한 모든 문자를 내장할 수 있습니다. LabVIEW 문자열을 C 문자열을 기다리는 외부 코드에 전달할 때, 내장된 널 문자는 해당 코드가 문자열을 첫 번째 널 문자에서 끝나는 것으로 해석하도록 합니다.
경로
LabVIEW 경로는 경로 타입과 경로 구성요소를 포함하는 불투명한 데이터 구조에 대한 포인터입니다. 경로 타입은 절대 경로의 경우 0, 상대 경로의 경우 1, 범용 명명 규칙 (UNC) 경로의 경우 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()
다음 함수를 사용하여 두 경로를 비교합니다:
- FPathCmp()
- FPathCmpLexical()
관련 정보
클러스터
LabVIEW는 클러스터 순서에 따라 여러가지 데이터 타입의 클러스터 원소를 저장합니다. 클러스터의 경계에서 마우스 오른쪽 버튼을 클릭한 후, 바로 가기 메뉴에서 클러스터 내의 컨트롤 순서 재설정을 선택하여 클러스터 순서를 보고 클러스터의 순서를 수정할 수 있습니다. LabVIEW는 스칼라 데이터를 클러스터에 직접 저장하고, 이는 간접적으로 배열, 문자열, 경로를 클러스터에 저장합니다. 특정 플랫폼의 정렬 제한 때문에, 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: 확장형 부동소수 10 12: 배열 핸들 4 16: U8 정수 1 - (Windows 64비트, macOS 64비트 및 Linux 64비트) 데이터가 최대 8 바이트 경계까지 자연스럽게 정렬되기 때문에, LabVIEW는 U8 정수 다음에 7 바이트를 채워서 다음 클러스터의 메모리 주소가 32가 되도록 만듭니다.
메모리 주소 원소 크기(바이트) 0: I16 정수 2 2: 확장형 부동소수 10 12: 채우기 4 16: 배열 핸들 8 24: U8 정수 1 25: 채우기 7 - (VxWorks) 데이터가 최대 8 바이트 경계까지 자연스럽게 정렬되기 때문에, LabVIEW는 U8 정수 다음에 7 바이트를 채워서 다음 클러스터의 메모리 주소가 40이 되도록 만듭니다. VxWorks는 확장형 부동소수를 롱 배정도로 구현합니다.
메모리 주소 원소 크기(바이트) 0: I16 정수 2 2: 채우기 6 8: 확장형 부동소수 16 24: 배열 핸들 8 32: U8 정수 1 33: 채우기 7
LabVIEW는 다른 클러스터 내에 임베디드된 클러스터를 직접 일렬로, 간접 지정(indirection) 없이 저장합니다. LabVIEW는 배열, 문자열, 경로만을 간접적으로 저장합니다.
다음 그림은 데이터를 같은 방식으로 저장하는 두 개의 다른 클러스터를 보여줍니다.
웨이브폼
LabVIEW는 웨이브폼을 클러스터같이 저장합니다.
참조 번호
LabVIEW는 부호 있는 32비트 정수로 참조 번호를 저장합니다.
배리언트
LabVIEW는 LabVIEW 내부 데이터 구조에 핸들로 배리언트를 저장합니다. 배리언트 데이터는 4 바이트로 이루어져 있습니다.