C++ 与 Lua 交互内存分配

本文介绍了C++如何与Lua进行内存分配交互,详细阐述了lua_State的创建、分配函数的定义与使用,以及如何获取和设置内存分配函数。通过示例代码展示了自定义内存管理的过程。
摘要由CSDN通过智能技术生成

一、lua_State 创建

C/C++ 与 Lua 的交互是通过 lua_State 这一句柄进行交互。我们常规的创建都是通过 luaL_newstate 这一辅助函数,他的源码实现如下:

LUALIB_API lua_State *luaL_newstate (void) {
   
  lua_State *L = lua_newstate(l_alloc, NULL);
  if (l_likely(L)) {
   
    lua_atpanic(L, &panic);
    lua_setwarnf(L, warnfoff, L);  /* default is warnings off */
  }
  return L;
}

通过源码可以知道,真正的创建是通过 lua_newstate 函数

LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud)

描述

函数创建并返回 lua_State 类型的指针,后续通过这一指针和 Lua 进行交互。这期间所有的内存分配和释放都会由参数 f 函数进行完成,包括该函数返回的 lua_State

参数

  • 参数 f :分配函数
  • 参数 ud :自定义用户数据,会携带进入 f 函数

返回值:

lua_State 的指针

二、分配函数

Lua 中默认的分配函数使用了 C 语言标准函数库的标准函数 malloc-realloc-free 进行内存的管理,以下便是 Lua 默认分配函数。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值