`
mryufeng
  • 浏览: 981819 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

lua扩展模块里面如何申请内存

    博客分类:
  • Lua
Lua 
阅读更多
我们在编写lua模块的时候经常会遇到申请内存的情况,有2中用途 1。 临时的 2. 长期的。 通常我们是用malloc来分配内存 free来释放。但是这样做的话 lua runtime就没有办法跟踪内存的使用。但是我们有解决方法:
1. 临时的 通过LuaL_Buffer来, 因为LuaL_buffer有自主扩展能力,所以我们可以存入很多数据 只是每次可以直接使用buffer的大小有限制。
2. 长期的, 通过lua_newuserdata 放在fenv里面. fenv 是个table,而且可以gc. 当分配的内存不够用的时候 可以重新分配一个 然后lua_replace一下 这样旧的内存就会被gc掉。

Note: Lpeg的代码实现很精致 可以精读。
分享到:
评论

相关推荐

    LUA全套帮助文档,里面有LUA的例子和LUA的全部资料

    8. **性能优化**:LUA的解释器设计高效,但为了进一步提升性能,开发者可能需要理解LUA的内存管理和编译原理,以及如何编写高效的LUA代码。 通过详读并实践"Programming_in_Lua"中的例子,你将能够掌握LUA的各个...

    Programming In Lua

    《Programming In Lua》是一本深度探讨Lua编程语言的著作,由巴西PUC-Rio大学的Pedro Henrique Moniz de ...无论你是初学者还是经验丰富的程序员,这本书都能为你提供宝贵的参考和启示,助你在Lua的世界里扬帆远航。

    Lua源码剖析

    Lua的标准库包括一系列预定义的函数和模块,如字符串处理、数学运算、文件操作等。这些库的实现同样值得学习,它们展示了如何利用Lua的特性来编写高效且易于维护的代码。 #### 结语 通过对Lua源码的深入分析,我们...

    LUA中文教程

    9. **模块化**:Lua通过模块系统实现代码组织和重用。 10. **可扩展性**:开发者可以通过C语言编写库来扩展Lua的功能。 《Programming in Lua》的翻译版本由www.luachina.net完成,并得到了原作者的授权。该书的...

    Lua知识脑图.rar

    **Lua知识脑图详解** Lua是一种轻量级的脚本语言,因其简洁、高效和可扩展性,在游戏开发、嵌入式系统、网络编程等多个领域得到了广泛应用。...在学习过程中,不断实践和探索,将使你在Lua的世界里游刃有余。

    lua5_1_4_Win32_dll9_lib

    Lua是一种轻量级的脚本语言,主要用于嵌入到其他应用程序中以提供配置、扩展或脚本支持。这个压缩包“lua5_1_4_Win32_dll9_lib”显然是针对Windows 32位系统的Lua 5.1.4版本的库文件,可能包含了动态链接库(DLL)和...

    lua中文教程.rar

    Lua的语法简洁明了,它使用了类似C语言的基础结构,但去除了许多复杂的特性,如指针和内存管理。基础数据类型包括数字、字符串、布尔值、表(类似于数组和哈希集合)、函数、线程(coroutines)和nil。其中,表是Lua...

    nginx-lua-waf:Nginx-Lua-WAF是一种基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙

    3. **配置集成**:将Nginx-Lua-WAF的Lua模块添加到Nginx配置文件中。 4. **规则定制**:根据需要修改或添加WAF规则。 5. **编译与启动**:重新编译Nginx并启动服务,Nginx-Lua-WAF开始生效。 Nginx-Lua-WAF的灵活性...

    Envoy Istio WebAssembly 扩展实现原理.pdf

    * 一个 Wasm 模块包括函数、全局变量、引入和输出的函数、内存(linear memory)要求 WebAssembly 的指令集非常简洁,只有四种数据类型:i32, i64, f32, f64。指令都是基于栈的操作,例如 i32.add 从栈取两个值相加...

    scripts

    4. Lua的垃圾回收机制:Lua自动管理内存,理解其垃圾回收的工作原理能帮助我们避免内存泄漏问题。 5. Lua与C/C++的交互:由于Lua的轻量化特性,它常被用作其他语言的脚本引擎,理解如何在C/C++程序中嵌入和调用Lua...

    redis-3.2.8.tar.zip

    10. **模块系统**:Redis 3.2 开始引入了模块系统,允许扩展 Redis 的功能,例如添加新的数据类型或命令。 解压 `redis-3.2.8.tar.gz` 文件后,你可以得到 `redis-3.2.8` 目录,里面包含源代码、编译脚本、文档、...

    深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书.zip

    关于Java与Nginx的结合,书里可能涵盖了如何使用Java编写Nginx的Lua脚本,利用LuaJIT进行快速的业务逻辑处理,或者通过Java的Nginx Java Module来扩展Nginx的功能,使得Java应用可以与Nginx进行更深度的交互。...

    .hammerspoon:我的个人 Hammerspoon 配置

    描述中提到的 ".hammerspoon" 指的是 Hammerspoon 的配置文件夹,里面包含了一系列 Lua 脚本和设置,用于定义 Hammerspoon 的行为。"我的个人 Hammerspoon 配置" 暗示这个压缩包可能包含了一些特定的、为个人工作流...

    redis2.4.5 64/32位

    7. 模块系统:自Redis 4.0开始,引入了模块系统,允许扩展Redis的功能,如Geo索引、图数据库等。 8. 集群支持:Redis 3.0开始支持集群模式,可以水平扩展存储容量和处理能力,通过将数据分片到多个节点来实现。 9....

    Developer_Snippets:应该在您的脚本中起作用的随机代码

    2. **模块和库的使用**:可能包含如何导入和使用Lua标准库或其他第三方库的代码,例如luasql用于数据库操作,lpeg用于模式匹配等。 3. **错误处理和调试**:可能有处理错误的代码片段,以及如何设置断点和日志记录来...

    pico_modules:用于Pico-8的Luapng片段精灵

    在游戏开发的世界里,Pico-8是一款独特的复古风格的游戏创作平台,它以其8位色彩限制、内置的编程语言 Lua 和紧凑的资源限制,激发了众多独立游戏开发者和像素艺术爱好者的创造力。而“pico_modules”则是针对Pico-8...

    redis-mac-5.0.5.tar.gz

    9. **模块系统**:Redis 5.0引入了模块系统,允许开发人员扩展Redis的功能,例如添加新的数据类型或命令。 在解压"redis-mac-5.0.5.tar.gz"后,会得到"redis-5.0.5"目录,里面通常包含以下内容: 1. `src`目录:...

    E3D引擎代码

    在下载的压缩包文件中,"E3D"很可能就是这个3D引擎的源代码目录,里面包含了各种源码文件,这些文件通常会按照模块进行组织,例如: 1. **渲染模块**:这部分代码负责将3D模型转化为2D图像,包括相机设置、光照计算...

    ngnix实战&openresty;介绍

    3. **模块化设计**:Nginx支持模块化的功能扩展,包括HTTP、邮箱协议处理模块等,用户可以根据需求选择或编写模块。 **二、Nginx安装** 1. **编译安装**:从官方下载源码,通过configure脚本配置,然后make和make ...

    3d游戏编程大师技巧源码

    在3D游戏编程的世界里,源码是理解游戏引擎工作原理和提高编程技能的重要资源。"3D游戏编程大师技巧源码" 提供了一个宝贵的平台,让我们深入探究3D游戏开发的核心技术。以下将详细讨论这个主题涉及的关键知识点: 1...

Global site tag (gtag.js) - Google Analytics