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

抖音运营变现手册大全:从0到1全面解析全局状态机及内存管理

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

资源介绍

甸 第二章 全局状态机及内存管理 甹申田 luai_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n ", 甹申由 lua_tostring(L, -1)); 甹申甲 return 0; /* return to Lua to abort */ 甹申申 } 甹申甴 甹申电 甹申甶 LUALIB_API lua_State *luaL_newstate (void) { 甹申男 lua_State *L = lua_newstate(l_alloc , NULL); 甹申甸 if (L) lua_atpanic(L, &panic); 甹申甹 return L; 甹甴田 } 界畵畡 定义的内存管理器仅有一个函数,虽然接口上类似 畲略畡畬畬畯畣 但是和 畃 标准库中的 畲略畡畬畬畯畣 有所区别。 它需要在 畮畳畩畺略 为 田 时,提供释放内存的功能。 和标准库中的内存管理接口不同,界畵畡 在调用它的时候会准确给出内存块的原始大小。对于需要为 界畵畡 定制一个高效的内存管理器来说,这个信息很重要。因为大多数内存管理的算法,都需要在释放内存的时候 了解内存块的尺寸。而标准库的 畦畲略略 和 畲略畡畬畬畯畣 函数却不给出这个信息。所以大多数内存管理模块在实现时, 在内存块的前面加了一个 畣畯畯畫畩略 ,把内存块尺寸存放在里面。界畵畡 在实现时,刻意提供了这个信息。这样我 们不必额外储存内存块尺寸,这对大量使用小内存块的环境可以节约不少内存。 另外,这个内存管理接口接受一个额外的指针 畵畤。这可以让内存管理模块工作在不同的堆上。恰当的 定制内存管理器,就可以回避线程安全问题。不考虑线程安全的因素,我们可以让内存管理工作更为高效。 另一个可以辅助我们做出更有效的内存管理模块的机制是在 界畵畡 电甮甲 时增加的。当 異畴畲 传入 畎畕界界 时, 畯畳畩畺略 的含义变成了对象的类型。这样,分配器就可以得知我们是在分配一个什么类型的对象,可以针对它做 一些统计或优化工作。 界畵畡 使用了一组宏来管理不同类别的内存:单个对象、数组、可变长数组等。这组宏定义在 畬畭略畭甮畨 中。 源代码 甲甮甲町 畬畭略畭甮畨町 畭略畭畯畲畹 由男 #define luaM_reallocv(L,b,on,n,e) \ 由甸 ((cast(size_t , (n)+1) > MAX_SIZET /(e)) ? /* +1 to avoid warnings */ \ 由甹 (luaM_toobig(L), (void *)0) : \ 甲田 luaM_realloc_(L, (b), (on)*(e), (n)*(e))) 甲由 甲甲 #define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) 甲申 #define luaM_free(L, b) luaM_realloc_(L, (b), sizeof (*(b)), 0) 甲甴 #define luaM_freearray(L, b, n) luaM_reallocv(L, (b), n, 0, sizeof ((b) [0])) 甲电 甲甶 #define luaM_malloc(L,s) luaM_realloc_(L, NULL , 0, (s)) 甲男 #define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t)))