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

相关推荐
晨启AI20 分钟前
GPT-5.5 来了!OpenAI 最新提示词指南深度解读
大数据·人工智能·ai·提示词
地球资源数据云37 分钟前
中国陆地生态系统主要植物功能特征空间分布数据
大数据·数据库·人工智能·机器学习
吠品44 分钟前
高性能JS数组操作:何时选用push、unshift、splice或扩展运算符?
linux·服务器·数据库
fish_xk1 小时前
Linux中的指令和权限
linux·运维·服务器
金智维科技官方1 小时前
AI智能体在7×24客服场景中的真实表现评估
大数据·人工智能·ai·rpa·智能体
暴力求解1 小时前
Linux---内核态
linux·运维·服务器
WL_Aurora1 小时前
MapReduce经典例题【第二期】
大数据·mapreduce
mounter6251 小时前
深入理解 Linux 网络新特性:netkit 中的 RX/TX Queue Leasing 与 TCP Devmem
linux·服务器·网络·tcp/ip·kernel
二十六画生的博客1 小时前
每个subtask都提交一份快照到hdfs,会把10个小的快照合并成一个大的吗?谁来合并?
大数据·hadoop·hdfs·flink
摇滚侠1 小时前
数据同步 黑马 Elasticsearch 全套教程,黑马旅游网案例
大数据·elasticsearch·搜索引擎