LabVIEW如何在内存中保存数据
- 更新时间2025-08-27
- 阅读时长8分钟
LabVIEW在内存中根据对象的数据类型保存输入控件、显示控件、连线和其他对象的数据。
布尔数据
LabVIEW用8位数保存布尔数据。如值为零,则布尔值为FALSE。所有非零的值都表示TRUE。
单字节整型
单字节整数(有符号和无符号)为8位二进制格式。
双字节整型
双字节整数(有符号和无符号)为16位二进制格式。
长整型
长整数(有符号和无符号)为32位二进制格式。
64位整型
64位整数(有符号和无符号)为64位二进制格式。
定点
定点数(有符号和无符号)为64位二进制格式。LabVIEW扩展位不为高时也对定点数符号扩展为64位。
单精度
单精度浮点数为32位二进制IEEE单精度格式。
双精度
双精度浮点数为64位二进制IEEE双精度格式。
扩展
扩展精度浮点数为IEEE 80位扩展格式。
单精度复数
单精度浮点复数由32位二进制IEEE单精度的实数和虚数组成。
双精度复数
双精度浮点复数由64位二进制IEEE双精度的实数和虚数组成。
扩展精度复数
扩展精度浮点复数由IEEE扩展精度的实数和虚数组成。
在浮点数和复数中,s为符号位(0代表正,1代表负),指数为偏移指数(底数为2),而尾数为[0,1]范围内的数。
时间标识
LabVIEW将时间标识保存为包含两个双精度值的簇。第一个双精度值表示自1904年1月1日星期五12:00 a.m(通用时间[01-01-1904 00:00:00])以来无时区影响的完成秒数。第二个双精度值标识表示秒的小数位。
数组
LabVIEW将数组保存为句柄(即指向指针的指针),包含以32位二进制整数表示的维度大小,随后是数组数据本身。如句柄为0,则数组为空。由于某些平台具有对齐约束条件,维度大小后可能会有如干字节的填充符以使数据的首个元素准确对齐。如写了一个使用LabVIEW数组的共享库,可能需要调整指针的大小。
下图为单精度浮点数的一维数组。其左侧的十进制数表示在内存中数组起始处的字节偏移。
下图为16位整数的四维数组。
在LabVIEW中,一维和二维数组均在内存中对齐。这有助于提高线性代数运算及矩阵数据类型相关运算的性能。
字符串
LabVIEW将字符串保存为指向某个结构的指针,该结构包含一个长度为4个字节的值和一个一维单字节整数(8位二进制字符)数组。如下图所示。如句柄或指向某个结构的指针为NULL,LabVIEW将字符串视为空字符串,即字符串的长度值为0。由于LabVIEW以长度值而不是终结字符来判断字符串的结束,因此可将带有NULL字符或ASCII字符0在内的任意字符嵌入字符串的任何位置。当发送LabVIEW字符串到期望C字符串的外部代码时,嵌入的NULL字符将导致外部代码将字符串解释为于第一个NULL字符处终止。
路径
LabVIEW路径是指向不透明数据结构的一个指针,不透明数据结构中包含路径类型和路径的组成部分。路径类型为0代表绝对路径,为1代表相对路径,为3代表通用命名约定(UNC)路径。UNC路径仅限于Windows环境且以\\<机器名>\<共享名>而不是盘符作为其首个路径组件。任何其他的路径类型均为无效路径。
使用下列函数获取关于路径的信息:
- 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)数据仅与单字节边界对齐。
- (macOS 64位、Linux 64位)数据与8字节边界对齐。
- (Windows 64位、VxWorks)数据与8字节边界对齐。
在所有平台上,簇按照最严格最齐元素的标准进行对齐。
下表显示了一个簇,其中包含:1个16位整数、1个双精度浮点数、1个扩展精度浮点数、1个数组、1个8位不带符号整数。每行都包括内存地址以及相应元素和元素大小。
- (Phar Lap ETS)数据仅与单字节边界对齐,下一个簇的内存地址为17。
内存地址 元素 大小(字节) 0: I16整数 2 2: EXT浮点数 10 12: 处理为数组 4 16: U8整数 1 - (Windows 64位、macOS 64位、Linux 64位)因为数据与8字节边界对齐,LabVIEW在U8整数后添加7个字节的填充。下一个簇的内存地址为32。
内存地址 元素 大小(字节) 0: I16整数 2 2: EXT浮点数 10 12: 填充 4 16: 处理为数组 8 24: U8整数 1 25: 填充 7 - (VxWorks)因为数据自然对齐至8字节边界,LabVIEW在8位不带符号整数后填充7个字节。所以,下一个簇的内存地址是40。请注意,VxWorks将扩展精度浮点数实现为长双精度数。
内存地址 元素 大小(字节) 0: I16整数 2 2: 填充 6 8: EXT浮点数 16 24: 处理为数组 8 32: U8整数 1 33: 填充 7
LabVIEW将簇按顺序嵌入直接存储在其他簇中。LabVIEW仅间接地保存数组、字符串和路径。
下图显示了两个以相同方式保存数据的簇。
波形
LabVIEW保存波形的方式与保存簇相同。
引用句柄
LabVIEW将引用句柄保存为有符号的32位二进制整数。
Variant;变体
LabVIEW将变体保存为指向LabVIEW内部数据结构的句柄。变体的数据类型为4个字节。