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++或编译标志可能导致应急池的分配大小和行为存在差异。