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