易语言 取自定义数据类型的大小
2016-09-10 01:37
316 查看
点击阅读原文
先说一下易语言的变量储存机制
易语言有基本数据类型和复合数据类型两种
基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值
他们都是储存在栈上的 大小都是固定的 用不着取
复合类型一般储存在堆上 然后在栈上储存堆上数据的引用
其中有几种比较特殊:字符串 字节集 数组
这两种类型的大小虽然储存在堆上的某个地方
但都有专门的取大小函数 直接调用即可
剩下就是自定义数据类型 比如类或者结构
特别是类 类的数据成员都是私有的
假如你想知道别人写的一个模块里一个类的大小
不可能通过数数据成员的方法得到
那如何取到呢?有人可能提出用“取变量地址”这个函数
可惜的是 “取变量地址”取到的永远是栈上的地址
根据上面所说 栈上地址的内容就是堆上地址
但是易语言没有一个用指针取整数的函数
这就需要用一个系统api:RtlMoveMemory
这个函数跟c语言memcpy的功能一样 但是有了他问题就变得容易的多
声明一个整形变量a q是一个自定义的类或者结构
RtlMoveMemory (取变量地址 (a), 取变量地址 (q), 4)
这样a储存的就是ls在堆区的地址
之后用到一个api:LocalSize
我们都知道堆区内存分配必然用到LocalAlloc/GlobalAlloc
那么也能通过LocalSize取到大小
调试输出 (LocalSize (a))
之后这样输出的就是ls的大小
当然 相同的数据类型 大小肯定是不变的
每次需要的时候不用都取
取一次之后当常数用就好了
先说一下易语言的变量储存机制
易语言有基本数据类型和复合数据类型两种
基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值
他们都是储存在栈上的 大小都是固定的 用不着取
复合类型一般储存在堆上 然后在栈上储存堆上数据的引用
其中有几种比较特殊:字符串 字节集 数组
这两种类型的大小虽然储存在堆上的某个地方
但都有专门的取大小函数 直接调用即可
剩下就是自定义数据类型 比如类或者结构
特别是类 类的数据成员都是私有的
假如你想知道别人写的一个模块里一个类的大小
不可能通过数数据成员的方法得到
那如何取到呢?有人可能提出用“取变量地址”这个函数
可惜的是 “取变量地址”取到的永远是栈上的地址
根据上面所说 栈上地址的内容就是堆上地址
但是易语言没有一个用指针取整数的函数
这就需要用一个系统api:RtlMoveMemory
这个函数跟c语言memcpy的功能一样 但是有了他问题就变得容易的多
声明一个整形变量a q是一个自定义的类或者结构
RtlMoveMemory (取变量地址 (a), 取变量地址 (q), 4)
这样a储存的就是ls在堆区的地址
之后用到一个api:LocalSize
我们都知道堆区内存分配必然用到LocalAlloc/GlobalAlloc
那么也能通过LocalSize取到大小
调试输出 (LocalSize (a))
之后这样输出的就是ls的大小
当然 相同的数据类型 大小肯定是不变的
每次需要的时候不用都取
取一次之后当常数用就好了
相关文章推荐
- 易语言 取自定义数据类型的大小
- java数据类型(大小等),变量定义,各进制书写方法
- C语言平面几何1-数据类型的定义
- 各种语言数据类型大小
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- C语言数据类型大小(万不可背,用的时候亲测就行)
- C语言数据类型大小分析(基于VC2005编译器)
- C语言平面几何1-数据类型的定义
- C语言数据类型大小和结构体中变量…
- C语言基础之变量的命名规则、定义常量、C的数据类型
- C语言数据类型大小和结构体中变量的地址分配方法【整理】
- vc和gcc对C语言数据类型长度的定义
- 各种语言数据类型大小
- 取自定义数据类型 地址
- Java语言基础02-用户定义数据类型
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- 学点 C 语言(15): 数据类型 - sizeof(检测类型大小)
- 编译器定义的C/C++语言各种基本数据类型的取值范围用程序输出
- 编译器定义的C/C++语言各种基本数据类型的取值范围
- 学点 C 语言(15): 数据类型 - sizeof(检测类型大小)