当前位置: 首页 > news >正文

【TDengine源码阅读】taosMemoryDbgInit函数

2025年5月25日,周日上午


int32_t taosMemoryDbgInit() {
#if defined(LINUX) && !defined(_ALPINE) && !defined(TD_ASTRA)int ret = mallopt(M_MMAP_THRESHOLD, 0);if (0 == ret) {return TAOS_SYSTEM_ERROR(ERRNO);}return 0;
#elsereturn TSDB_CODE_FAILED;
#endif
}

这段代码是TDengine数据库的内存调试初始化函数,主要用于在Linux环境下(非Alpine Linux和TD_ASTRA系统)通过mallopt调整内存分配策略。Alpine Linux使用musl库而非glibc,可能不支持此配置。

核心功能解析

mallopt(M_MMAP_THRESHOLD, 0)  

作用:将mmap分配内存的阈值设为0,强制所有内存分配使用brk/sbrk而非mmap。

目的:用于追踪内存泄漏(结合Valgrind等工具时需统一分配方式)。

拓展:除了用于调试内存泄漏外,禁用mmap还能避免频繁的mmap系统调用(默认阈值128KB),减少系统调用开销,提升小内存分配的效率,但可能增加内存碎片,适合频繁分配小内存的场景。。

返回值处理

若mallopt失败,通过TAOS_SYSTEM_ERROR(ERRNO)返回系统错误码。mallopt成功则返回0。

非Linux环境直接返回TSDB_CODE_FAILED。

http://www.dtcms.com/a/211915.html

相关文章:

  • Vue 3 (2) 模块化开发入门教程(ESM方式)
  • 深入解析MongoDB WiredTiger存储引擎:原理、优势与最佳实践
  • 【计算机网络】基于UDP进行socket编程——实现服务端与客户端业务
  • 线性代数之张量计算,支撑AI算法的数学原理
  • 历年复旦大学保研上机真题
  • MADS-box编码基因Tunicate1通过增加玉米果穗上方的叶片数量正向调控玉米产量。
  • 【c++11】智能指针 -- 摆脱内存困扰,现代编程的智能选择
  • 2025.5.19-2025.5.25学习周报
  • 58.在新建对话的空白页面添加一些引导性话语
  • 【Web前端】ECMAScript 6基础学习
  • [Java恶补day6] 15. 三数之和
  • nginx对webdav支持不好的解决办法
  • 浅谈ggplot2图表美化~
  • 【电路笔记】-音频变压器(Audio Transformer)
  • 云原生安全:网络协议TCP详解
  • 云原生安全之HTTP协议:从基础到实战的安全指南
  • 计算机网络学习(七)——IP
  • 竞赛小算法总结(一):位运算,因数分解和“马拉车”算法含代码详解
  • BUUCTF——RCE ME
  • 基于OpenCV 的人体姿态估计
  • gcc编译构建流程
  • 【慧游鲁博】【8】前后端用户信息管理:用户基本信息在小程序端的持久化与随时获取
  • 华硕FL8000U加装16G+32G=48G内存条
  • C#索引器详解:让对象像数组一样被访问
  • 正则表达式全解:一文学会正则表达式【附在线正则表达式练习网站】
  • git子模块--命令--表格版
  • Java 学习笔记:注解、泛型与 IO 流
  • 力扣395做题笔记
  • 刷leetcode hot100返航版--栈和队列5/24
  • 人工智能数学基础实验(三):最小二乘法-数值计算