【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。

相关推荐
Sumlll_1 小时前
Ubuntu系统下QEMU的安装与RISC-V的测试
linux·ubuntu·risc-v
猫头虎1 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
Sylvan Ding1 小时前
度量空间数据管理与分析系统——大数据泛构课程作业-2025~2026学年. 毛睿
大数据·深圳大学·大数据泛构·度量空间数据管理与分析系统·毛睿·北京理工大学珠海校区
你怎么知道我是队长2 小时前
C语言---typedef
c语言·c++·算法
带土13 小时前
5. enum(枚举)关键字在C/C++中的作用
c语言·c++
晚风吹人醒.3 小时前
SSH远程管理及访问控制
linux·运维·ssh·scp·xshell·访问控制·远程管理
面向Google编程4 小时前
Flink源码阅读:JobManager的HA机制
大数据·flink
Uncertainty!!4 小时前
Linux多用户情况下个别用户输入密码后黑屏
linux·远程连接
Tony Bai4 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
necessary6535 小时前
使用Clion查看linux环境中的PG源码
linux·运维·服务器