精易论坛
标题:
易语言 动态分配数据结构
[打印本页]
作者:
LLJ
时间:
2020-8-23 06:38
标题:
易语言 动态分配数据结构
数据结构,易语言称为:自定义数据类型。
但它不够灵活,我们会在某些特殊情况时,希望它可以动态分配很多个,而且不要在子程序结束时就自动释放内存。
C++有new和delete操作符,而易语言没有。
但是我们可以用常量来做内存偏移。
数据结构不过是一块内存而已,通过 结构.成员 这种方式访问成员,结构它有内存地址,成员它就是内存偏移。
所以 结构.成员 相当于 结构内存地址+成员内存偏移。
例如:
数据类型名
公开
备 注
结构
成员名
类 型
传址
数组
备 注
A
整数型
B
整数型
.版本 2
.数据类型 结构
.成员 A, 整数型
.成员 B, 整数型
我们改成这样:
常量名称
常量值
公 开
备 注
结构_大小
8
结构_A
0
结构_B
4
.版本 2
.常量 结构_大小, "8"
.常量 结构_A, "0"
.常量 结构_B, "4"
用下划线来代表原来的“.”号。内存偏移从0开始,整数型占4个字节,结构_大小 整个结构的大小,分配内存时用到。
但考虑到名称冲突问题,直接记住不跟下划线就是大小了:
常量名称
常量值
公 开
备 注
结构
8
结构_A
0
结构_B
4
.版本 2
.常量 结构, "8"
.常量 结构_A, "0"
.常量 结构_B, "4"
用法:
结构 = 申请内存(#结构)
整数到指针(结构+#结构_A, 1) '相当于:结构.A = 1
输出调试文本(指针到整数(结构+#结构_A)) '相当于:输出调试文本(结构.A)
当不再用时记得:释放内存(结构)
对了,虽然可以直接把整个数据结构复制到新的内存,但这样做不够效率。而且易语言的数据结构是强制4字节对齐的。
在调用API的时候会进行转换并分配内存,调用结束后会释放。
当调用API复制内存的时候其实是复制两遍了。
如果你不先算好大小的话调用LocalSize又被来一次。
RtlMoveMemory(地址,结构,LocalSize(结构))
当然也可以反过来:RtlMoveMemory(结构,地址,LocalSize(结构))
这里是演示,建议用常量的方法。
作者:
showtime
时间:
2020-8-23 11:49
强啊 不过确实 其他语言有new就是个优势
作者:
阿龙
时间:
2022-3-31 05:28
常量定义+内存偏移太牛逼了
作者:
year1970
时间:
2024-1-27 09:32
感谢分享
作者:
Timelord
时间:
2024-6-10 14:11
楼主的很多帖子都让我受益匪浅,在此真心感谢!
欢迎光临 精易论坛 (https://125.confly.eu.org/)
Powered by Discuz! X3.4