Dev*_*lar 7 c++ string rationale c++11 libc++
在查看std :: basic_string的libc ++实现时,我在第1374行(在撰写本文时)遇到了这个问题:
enum {__alignment = 16};
Run Code Online (Sandbox Code Playgroud)
此值用于后续对齐计算,字符串大小请求向上舍入为此数字的倍数.
我可以接受一些四舍五入是为了避免内存碎片或其他什么,但......
我想知道在这里使用硬编码16作为数字背后是否存在任何特定的理由,或者它是否只是用作"漂亮的'圆形'数字".
对于64位计算机来说,16相当于alignof( std::max_align_t ),这是有道理的.但完全相同的值__alignment也用于32位架构,所以......?
当我第一次设计时<string>,libc ++还没有注定是开源的.我只是为Apple的平台写作.并且Apple malloc总是分配至少16个字节,并且以16个字节的倍数分配,无论你要求多少(至少在2007年这是真的,我最近没有检查过).
因此,如果最常用的分配器将为您提供16个字节,那么您也可以在容量中使用它们.
几年前,我曾尝试更改分配器API,以便它可以向分配器询问它为任何特定请求实际分配了多少内存.但那次尝试失败了.因此,下一个最好的事情是利用对代码要处理的最常见分配器的先验知识.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |