TC官方合作论坛

标题: 【类人猿TC内存探讨】 第三讲:内存变量指针 [打印本页]

作者: 类人猿    时间: 2017-8-2 21:40
标题: 【类人猿TC内存探讨】 第三讲:内存变量指针
本帖最后由 类人猿 于 2017-8-31 01:06 编辑

这里不针对任何网络游戏和公司,如果触犯官方麻烦请联系本人QQ:578052137  技术群:128262077 处理,也希望版主高抬贵手。本人只是一名计算机业余爱好者,平时都有自己稳定的工作,学习这个就是业余爱好。我觉得学习脚本最好的老师还是兴趣,可以做自己感兴趣和喜欢的东西不是挺好的吗?
<<<<<<<<<<<<<<<<<<<<<<
认识内存,必先了解TC自身<<<<<<<<<TC6.2版本,新版待测试<<<<<<<<<  
Tips:有不少新手以为鼠标那个指针跟这个内存指针是同样的玩儿,我也很无奈还要和我喷这个。我再重复声明他们两个是完全不同的东西。亲们,不懂还是多谦虚点学习哦。

好东西要跟大家分享才对的。下面我看下TC内存指针支持:TC指针支持大概分为下面几个方面
1.变量指针   2.一般TC函数指针  3.结构体指针  4.回调函数特殊指针
抛开术语概念,内存分析变量要至少从三方面来考虑问题:1.变量类型,2.内存空间长度,3.变量指向内存地址

                                      首先我来分析: 变量指针
  1. //==========================================================首先我们看下TC变量指针源码
复制代码
var A=100
traceprint(getvarpointer(A))

现在我们思考三个问题:A数据类型是什么?A在内存空间长度是多少呢?变量指针是多少呢?
根据我分析达到答案:A是个长整数,在TC里面占四个字节,变量指针可通过 “获取变量指针(A)”命令来获取.

思考验证:这里变量指针是否和C语言的指针一样的呢?其实不是真正的指针,在TC里面变量var是多类型,在内存里面表示多内存很可能他是个结构体或者是个类。当然说结构体可能大家有晕了,如果这里
看不明白的话可以先跳过的,结构体就是类似数组,但是能支持很多类型。
1.下面我用TC写了个内存测试脚本方便测试
     //这里我添加了一个按钮和一个编辑框,编辑框是用来显示数据的    var A=100
    function 按钮0_点击()
    A=A+100
    traceprint(getvarpointer(A))
    editsettext("编辑框0",A)
    traceprint(A)
    end

2.点击自增,再用CE进行内存的搜索得到A的内存指针是:04948F20,它的值就是400。

[attach]25317[/attach]


3.如下,当时我们发现了一个问题:78483224这个值是变量指针 十六进制 就是:04AD8F18,和我们CE查找到的内存地址相差8


[attach]25320[/attach]            

[attach]25318[/attach]
4.思考:为什么会这样的?为什么不一致的?
因为TC变量var应该是个结构体或者类库来的,不是真正意义的指针,不同数据类型它会自动智能进行内存储存。我们在这里猜测工程师的编写TC思路而已,应该是不会有错的。
[attach]25319[/attach]

5.我们再次进行内存查看验证果然是这样,下面还有很多0的空值,可能是储存其他数据类型。


最后结论:整数型变量地址=CE搜索真正地址(获取变量指针)+8
整数型变量地址=CE搜索真正地址(获取变量地址)希望大家有所收获。其他数据类型我就不一一测试了,希望大家能把结果反馈给我。



作者: 2576605471    时间: 2017-8-2 21:58

作者: 类人猿    时间: 2017-8-11 01:11
没人来看,自己点赞下!!!
作者: JY.Wang    时间: 2017-8-29 15:18
类人猿 发表于 2017-8-11 01:11
没人来看,自己点赞下!!!:

支持以下,虚心学习~!
作者: tt22828    时间: 2017-9-11 17:14
学习了,感谢楼主
作者: tst    时间: 2017-9-24 15:16
相差8么?不止啊,还有最后的三连等是什么意思




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1