std::mapint, int m;往里面插 100 万个键值对,key 和 value 都是 int。100 万个pairint, int,每个 8 字节,理论上只需要 8MB。跑完之后用/proc/self/status读 VmRSS——56MB。多出来的 48MB 去哪儿了?这篇从 libstdc++ 的_Rb_tree_node源码开始,逐字节拆开红黑树的节点内存布局,算清楚每一字节的去向:3 个指针占 24 字节,颜色字段占 1 字节但对齐填充吃掉 7 字节,malloc 的 chunk 头部再加 16 字节——加上你的 8 字节数据,一个节点的真实占用是 56 字节。存进去的数据只占总空间的七分之一。先跑一遍:数字不会骗人在所有拆解之前,先看真实测量数据。下面这段代码往一个std::mapint, int里插入 100 万个元素,然后读取进程的 RSS:#includemap