文件名称:内存管理-从0到1抖音运营变现手册大全
文件大小:2.13MB
文件格式:PDF
更新时间:2024-06-27 10:40:14
lua
第二章 全局状态机及内存管理 界畵畡 可以方便的被嵌入 畃 程序中使用。 你可以很容易的创建出一个 界畵畡 虚拟机对象,不同的 界畵畡 虚拟机之间的工作是线程安全的,因为一切 和虚拟机相关的内存操作都被关联到虚拟机对象中,而没有利用任何其它共享变量。 界畵畡 的虚拟机核心部分,没有任何的系统调用,是一个纯粹的黑盒子,正确的使用 界畵畡 ,不会对系统造 成任何干扰。这其中最关键的一点是,界畵畡 让用户自行定义内存管理器,在创建 界畵畡 虚拟机时传入,这保证 了 界畵畡 的整个运行状态是用户可控的。 2.1 内存管理 界畵畡 要求用户给出一个内存管理函数,在 界畵畡 创建虚拟机的时候传入。。 由 typedef void * (* lua_Alloc) (void *ud , void *ptr , size_t osize , size_t nsize); 甲 申 LUA_API lua_State *( lua_newstate) (lua_Alloc f, void *ud); 虽然许多时候,我们并不直接使用 畬畵畡 畮略畷畳畴畡畴略 这个 畁畐畉 ,而是用另一个更方便的版本 畬畵畡界 畮略畷畳畴畡畴略 。 但从 畁畐畉 命名就可以看出,后者不输入核心 畁畐畉 ,它是利用前者实现的。它利用 畃 标准库中的函数实 现了一个默认的内存管理器,这也可以帮助我们理解这个内存管理器的语义。 源代码 甲甮由町 畬畡畵畸畬畩畢甮畣町 畬畵畡界 畮略畷畳畴畡畴略 甹由甸 static void *l_alloc (void *ud , void *ptr , size_t osize , size_t nsize) { 甹由甹 (void)ud; (void)osize; /* not used */ 甹甲田 if (nsize == 0) { 甹甲由 free(ptr); 甹甲甲 return NULL; 甹甲申 } 甹甲甴 else 甹甲电 return realloc(ptr , nsize); 甹甲甶 } 甹甲男 甹甲甸 甹甲甹 static int panic (lua_State *L) { 男