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

相关推荐
W说编程2 分钟前
算法导论第十四章 B树与B+树:海量数据的守护者
c语言·数据结构·b树·算法·性能优化
哈哈浩丶5 分钟前
Linux系统移植⑦:uboot启动流程详解-board_init_r执行过程
linux·驱动开发
Flink_China8 分钟前
官宣 | Fluss 0.7 发布公告:稳定性与架构升级
大数据·flink
mit6.82410 分钟前
[Linux_core] “虚拟文件” | procfs | devfs | 上下文
linux·c语言·c++
wenzhangli71 小时前
筑牢安全防线:电子文件元数据驱动的 AI 知识库可控管理方案
大数据·人工智能
我言秋日胜春朝★1 小时前
【Linux网络编程】守护进程
linux·运维·服务器
星沉地动2 小时前
Makefile参考样例5:多个文件夹.c和.cpp混合编译
linux
Mikhail_G2 小时前
Python初学者入门指南
大数据·运维·开发语言·python·数据分析
街灯L2 小时前
【Linux】Tomcat搭建
java·linux·服务器·tomcat
riverz12272 小时前
‘Target closed‘ error in Puppeteer解决
linux