MyDog
文章平均质量分 62
kaonicaoni
这个作者很懒,什么都没留下…
展开
-
MyDog--核心--寄存器
寄存器是一个双向列表。它的数据来源于栈优先的堆栈内存中,数据里面存放input和temp的数据,output在上一个寄存器的temp里。一个函数运行体对应着一个寄存器,寄存器的数据大小由编译时确定。寄存器的是否归还,是指寄存器用完(函数运行体执行完毕)的时候,如果寄存器开始指针指向堆内存开始位置,那么就需要把指向的堆内存归还给内存池。如上,如果栈内存不够,就在堆上存放寄存器数据,所以寄存器数据2和3并不是连续的。原创 2024-05-18 22:56:44 · 88 阅读 · 0 评论 -
MyDog--核心--函数运行体
如果考虑到类型,而且算术运算只考虑int,double,int128,那么如果再展开的话,一条a=b+c的加法要分裂成9条指令!Lua的算术指令是14条,lua的一条指令被压缩成一个int32的数值,内存是少了,但是我的设计是加载后,把指令展开,空间换时间,这点内存的牺牲是很值的。:执行某个脚本函数的过程,所涉及到的寄存器,记录器,指令列表,当前循环所需的临时变量等,它们之间以某种优化的搭配方式组合起来,在面向各种各样的情况下(如挂起,恢复,调试,异常等),如何确保脚本的正确执行的方法叫函数运行体。原创 2024-05-18 22:50:55 · 568 阅读 · 0 评论 -
MyDog--类型--flag
我们经常需要一些bool数组来做一堆标识,其实一个bool占1bit就够了。所以我设计了MDFlag类,代码很简单,但是很实用。所以当作个基本类型使用。我是直接在c#版本里抄过来的,其实我有个c#版本的vm!原创 2024-05-09 14:58:59 · 111 阅读 · 0 评论 -
MyDog--内存--pool
由于主要服务于属性集,所以可以在编译前知道各种属性集大小,从而得出PoolConfItem。配置内容,可结合TCMalloc小内存的参数,以及由工具分析出来的配置。s2index函数是很有用的,rs返回真实内存块大小。在这个基础上,对这些池进行管理,于是就有了。具体的cpp看源码吧...原创 2024-05-09 09:36:10 · 223 阅读 · 0 评论 -
MyDog--工程项目
MyDogVM只是一个解释型的脚本虚拟机,它并没有io读写能力,也没有专门的log功能等,这些都是由外部框架提供.另外MyDogVM是设计成单线程的,所以内部没有锁.很纯粹!协程功能也是外部框架提供.MyDogSharp的输出目录里有个叫finish.bat的文件,用于把生成接口拷贝到MyDogCross里的CSharpApp(c#控制台)的生成目录里.跨平台的时候,针对语言进行库的封装,比如c#,通过MyDogSharp(c++的动态库),导出一些对外使用的接口,生成dll/os等。原创 2024-05-08 09:35:25 · 246 阅读 · 0 评论 -
MyDog--类型--浮点数
基于上述2点,我打算自己封装个以整数存储的浮点数.统一精度,解决上述2个问题.唯二代价就是取值范围缩少和运算时候多了一步个乘/除运算.原理很简单,假设精度是0.0001(即万分比),那么转换成自定义浮点数的时候,数值要除以0.0001。但对C++来说,可以不管的...我window和linux都运行过测试代码.以下代码是为了非mdfloat数值和mdfloat相运算,这里只写了加法。浮点数有2个问题,精度问题和数据不一致问题.以下代码是为了得到真实的float值。首先是定义个全局的精度。原创 2024-04-28 21:32:55 · 215 阅读 · 0 评论 -
MyDog--前言和目录(附源码链接)
自己做个新轮子,强类型的脚本语言。原创 2024-04-28 12:25:39 · 93 阅读 · 0 评论