登录 注册
当前位置:主页 > 资源下载 > 49 > 从0到1抖音运营变现:全局状态机手册大全

从0到1抖音运营变现:全局状态机手册大全

  • 更新:2024-05-14 18:31:08
  • 大小:2.13MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:游戏开发 - 课程资源
  • 格式:PDF

资源介绍

由田 第二章 全局状态机及内存管理 甹男 return newblock; 甹甸 } 从代码中可以看到,畬畵畡畍 畲略畡畬畬畯畣 根据传入的 畯畳畩畺略 和 畮畳畩畺略 调整内部感知的内存大小(设置 畇畃畤略畢畴), 在内存不够用的时候会主动尝试做 畇畃 操作。 畬畭略畭甮畣 中还有另一个内部 畁畐畉 畬畵畡畍 畧畲畯畷畡畵畸 ,它是用来管理可变长数组的。其主要策略是当数组空 间不够时,扩大为原来的两倍。 源代码 甲甮甴町 畬畭略畭甮畣町 畧畲畯畷當略畣畴畯畲 甴甶 void *luaM_growaux_ (lua_State *L, void *block , int *size , size_t size_elems , 甴男 int limit , const char *what) { 甴甸 void *newblock; 甴甹 int newsize; 电田 if (*size >= limit /2) { /* cannot double it? */ 电由 if (*size >= limit) /* cannot grow even a little? */ 电甲 luaG_runerror(L, "too many %s (limit is %d)", what , limit); 电申 newsize = limit; /* still have at least one free place */ 电甴 } 电电 else { 电甶 newsize = (*size)*2; 电男 if (newsize < MINSIZEARRAY) 电甸 newsize = MINSIZEARRAY; /* minimum size */ 电甹 } 甶田 newblock = luaM_reallocv(L, block , *size , newsize , size_elems); 甶由 *size = newsize; /* update only when everything else is OK */ 甶甲 return newblock; 甶申 } 由 #define luaM_growvector(L,v,nelems ,size ,t,limit ,e) \ 甲 if (( nelems)+1 > (size)) \ 申 ((v)=cast(t *, luaM_growaux_(L,v,&( size),sizeof(t),limit ,e))) 2.2 全局状态机 从 界畵畡 的使用者的角度看,畧畬畯畢畡畬 畓畴畡畴略 是不可见的。我们无法用公开的 畁畐畉 取到它的指针,也不需要 引用它。但分析 界畵畡 的实现就不能绕开这个部分。 畧畬畯畢畡畬 畓畴畡畴略 里面有对主线程的引用,有注册表管理所有全局数据,有全局字符串表,有内存管理函数, 有 畇畃 需要的把所有对象串联起来的相关信息,以及一切 界畵畡 在工作时需要的工作内存。 通过 畬畵畡 畮略畷畳畴畡畴略 创建一个新的 界畵畡 虚拟机时,第一块申请的内存将用来保存主线程和这个全局状态 机。界畵畡 的实现尽可能的避免内存碎片,同时也减少内存分配和释放的次数。它采用了一个小技巧,利用一 个 界畇 结构,把主线程 畬畵畡 畓畴畡畴略 和 畧畬畯畢畡畬 畓畴畡畴略 分配在一起。