败犬日报 2026-07-27
败犬日报 2026-07-27
1. std::unique_ptr 因为 ABI 问题不能走寄存器传参
来自周刊群,参考。
System V ABI 规定,函数传参时,如果类型有非平凡拷贝 / 移动构造,或非平凡析构,参数必须通过栈来传递,而不是性能好一点的寄存器传递。当然寄存器传参还有其他要求,这里就不展开。
std::unique_ptr 必须通过栈来传递参数,即使它可能只有 8 字节。
对于这个问题,有了编译器扩展 [[clang::trivial_abi]],谷歌发现有 1.6% 的性能提升,但是有一定风险。也可以看看这个。