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

相关推荐
AttaGain8 分钟前
rclone、rsync、scp使用总结
linux
伤心男孩拯救世界(Code King)1 小时前
Linux网络:多路转接 epoll
linux·运维·网络
yyy0002001 小时前
Linux9 root密码修改
linux·运维·服务器
小熊h1 小时前
【分布式的个人博客部署】
linux·运维·服务器·分布式
酷飞飞2 小时前
C语言的复合类型、内存管理、综合案例
java·c语言·前端
海上Bruce3 小时前
C primer plus (第六版)第十章 编程练习第7,8,9,10,11题
c语言
仟濹3 小时前
【C/C++】整数超过多少位时用「高精度」
c语言·c++·算法
夏影孤灯3 小时前
C 语言问题
c语言·开发语言
宸津-代码粉碎机3 小时前
LLM 模型部署难题的技术突破:从轻量化到分布式推理的全栈解决方案
java·大数据·人工智能·分布式·python
筵陌7 小时前
Linux线程概念与控制(下)
linux