Hasty Briefsbeta

双语

Why is the first C++ (m)allocation always 72 KB?

3 months ago
  • #Memory Allocation
  • #C++
  • #Exception Handling
  • 首次C++内存分配总是72KB,这是由于C++标准库为异常处理建立的'应急内存池'所致。
  • 该应急池确保即使malloc失败时仍有内存可用于异常处理,采用延迟分配策略在程序启动时完成。
  • 72KB的大小是根据系统字长(64位系统为8字节)和预定义常量(EMERGENCY_OBJ_SIZE与EMERGENCY_OBJ_COUNT)计算得出。
  • 可通过GLIBCXX_TUNABLES环境变量或libstdc++构建配置来调整或禁用该应急池。
  • Valgrind工具曾将该分配标记为'仍可访问'引发困惑,但新版会在清理阶段显式释放。
  • 不同版本的libstdc++或编译标志可能导致应急池的分配大小和行为存在差异。