15 c++ optimization vector c++11
C++ 0x FCD在23.3.6.2向量容量中表示:
Run Code Online (Sandbox Code Playgroud)void shrink_to_fit();备注:shrink_to_fit是一个将capacity()减小为size()的非绑定请求.[注意:请求是非绑定的,以允许特定于实现的优化的纬度. - 尾注]
打算允许哪些优化?
dou*_*lep 13
这非常紧张,但是:
考虑vector的分配器,它只能分配4 KB粒度的内存.然后,如果向量具有4096的容量和4095的大小,则重新分配内存是没有意义的,因为这不会节省内存,但是浪费了一些CPU时间来复制元素.
四舍五入的想法确实是相关的,而是间接的.问题是"打算允许哪些优化." 这是对标准化过程的一些假设.优化.一般来说,目的是允许所有不可观察的优化,然后允许一些 - 例如复制省略,其中可以观察到复制ctor的非调用.在这种情况下,capacity() != size()可能是优化的可观察效果,并且标准允许它.
至于添加这个纬度的原因,我还可以设想忽略收缩请求时capacity()只有101%size()- 收益太少.永远不会有一个确切的原因,因为LWG由许多有很多观点的人组成.只有通过授予这种自由才能产生足够的额外优化机会.
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |