为什么 24 字节的 std::string 无法用寄存器传递?起底 C++ ABI 的底层真相

为什么 24 字节的 std::string 无法用寄存器传递?起底 C++ ABI 的底层真相
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#includeiostream

最新新闻

日新闻

周新闻

月新闻