libstdc++(GCC)和 libc++(Clang)的std::string都做了 Small String Optimization,但内存布局截然不同:libstdc++ 用 32 字节换来实现简单——指针 + size + union{capacity, 16 字节 buffer},SSO 上限 15 个字符;libc++ 用 24 字节的极限压缩——把is_long标志位和short_size编码进同一个字节的高低位,挤出 22 个字符的内联空间。这 7 个字符的差距背后是一整套位操作技巧、字节序适配和 ABI 层面的深远影响。
sizeof(std::string)在两套标准库之间差了 8 字节
写一个最简单的程序:
// GCC 13, libstdc++, x86-64 Linux#include<iostream>