当前位置: 首页 > java >正文

【TDengine源码阅读】taosMemoryDbgInit函数

2025年5月25日,周日上午


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;
#elsereturn TSDB_CODE_FAILED;
#endif
}

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

核心功能解析

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。

http://www.xdnf.cn/news/8719.html

相关文章:

  • 基于MATLAB实现传统谱减法以及两种改进的谱减法(增益函数谱减法、多带谱减法)的语音增强
  • 全面理解类和对象(下)
  • 5.25本日总结
  • 计算机网络-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx
  • DAY36
  • GitLab-CI简介
  • 单链表的排序
  • Collection集合遍历的三种方法
  • multiprocessing多进程使用案例
  • 用神经网络对信贷项目进行预测
  • java三种常见设计模式,工厂、策略、责任链
  • 原生php单元测试
  • bun全栈开发尝鲜:用bun-react-template实现Markdown文章展示
  • removeIf() 方法,结合 Lambda 表达式
  • 鸿蒙仓颉开发语言实战教程:页面跳转和传参
  • WORD 转 PDF 工具:排版 / 图片 / 表格批量转换提升办公效率
  • Acrobat 中 JavaScript 为 PDF 带来的交互
  • 篇章二 数据结构——前置知识(二)
  • C# 正则表达式
  • c/c++的opencv伽马噪声
  • ArrayList 与 LinkedList 区别?
  • 【c++11】智能指针 -- 摆脱内存困扰,现代编程的智能选择
  • OSCP备战-mr-robot靶机详细解法
  • conda 环境中opencv 报错
  • Maven Profile高级策略与冲突解决
  • 手眼标定:九点标定、十二点标定、OpenCV 手眼标定
  • Cursor最新问题不能使用Claude3.7问题的解决方案
  • [Linux]如何配置mailutils郵件服務?
  • 基于STM32的电容电阻测量仪Proteus仿真设计+程序设计+设计报告+讲解视频
  • MyBatis实战指南(三)MyBatis常用配置详解(XML配置,环境配置,类型别名,属性与映射器)