libc的std :: basic_string的16字节对齐模式背后的原因是什么?

前端之家收集整理的这篇文章主要介绍了libc的std :: basic_string的16字节对齐模式背后的原因是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在查看 the libc++ implementation of std::basic_string时,我在1374行(在撰写本文时)遇到了这个问题:
enum {__alignment = 16};

此值用于后续对齐计算,字符串大小请求将向上舍入为此数字的倍数.

我可以接受一些舍入是为了避免内存碎片或其他什么,但……

我想知道在这里使用硬编码16作为数字背后是否存在任何特定的理由,或者它是否只是用作“漂亮的’圆形’数字”.

对于64位计算机,16对等于(std :: max_align_t),这是有道理的.但__alignment的完全相同的值也用于32位架构,所以…?

解决方法

当我第一次设计< string>时,libc还没有注定是开源的.我只是为Apple的平台写作.并且Apple的malloc总是分配至少16个字节,并且以16个字节的倍数,无论你要求多少(至少在2007年这是真的,我最近没有检查过).

因此,如果最常用的分配器将为您提供16个字节,那么您也可以在容量中使用它们.

几年前,我曾尝试过change the allocator API so that it could ask the allocator how much memory it actually handed out for any particular request.但是那次尝试失败了.因此,下一个最好的事情是利用对代码要处理的最常见分配器的先验知识.

猜你在找的C&C++相关文章