【TDengine源码阅读】taosMemoryDbgInit函数

2025年5月25日,周日上午


c 复制代码
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;
#else
  return TSDB_CODE_FAILED;
#endif
}

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

核心功能解析

c 复制代码
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。

相关推荐
Learn-Share_HY11 分钟前
[Linux]如何配置mailutils郵件服務?
linux·运维·mysql·ubuntu·apache·bash·devops
UrSpecial12 分钟前
页表:从虚拟内存到物理内存的转换
linux·运维·服务器
草莓啵啵~25 分钟前
Linux--环境的搭建(云服务器)
linux·服务器
liulilittle39 分钟前
CentOS7更新 GLIBC 2.25
linux·运维·服务器·centos
MIT_CompNote_探索者1 小时前
Linux操作系统向上提供了哪些系统调用?
linux·服务器·网络
北漂老男孩1 小时前
Flink 常用算子详解与最佳实践
大数据·flink·学习方法
千里镜宵烛1 小时前
Linux 的编辑器--vim
linux·运维·编辑器
szxinmai主板定制专家1 小时前
基于RK3576+FPGA+CODESYS工控板的运动控制模块方案
大数据·arm开发·人工智能·fpga开发
tuszhangs2 小时前
ubuntu 安装latex
linux·运维·ubuntu
AI+程序员在路上2 小时前
Linux 内核音视频架构(V4L2 )介绍
linux·架构·音视频