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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...