为什么shrink_to_fit不绑定?

15 c++ optimization vector c++11

C++ 0x FCD在23.3.6.2向量容量中表示:

void shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

备注:shrink_to_fit是一个将capacity()减小为size()的非绑定请求.[注意:请求是非绑定的,以允许特定于实现的优化的纬度. - 尾注]

打算允许哪些优化?

dou*_*lep 13

这非常紧张,但是:

考虑vector的分配器,它只能分配4 KB粒度的内存.然后,如果向量具有4096的容量和4095的大小,则重新分配内存是没有意义的,因为这不会节省内存,但是浪费了一些CPU时间来复制元素.


MSa*_*ers 5

四舍五入的想法确实是相关的,而是间接的.问题是"打算允许哪些优化." 这是对标准化过程的一些假设.优化.一般来说,目的是允许所有不可观察的优化,然后允许一些 - 例如复制省略,其中可以观察到复制ctor的非调用.在这种情况下,capacity() != size()可能是优化的可观察效果,​​并且标准允许它.

至于添加这个纬度的原因,我还可以设想忽略收缩请求时capacity()只有101%size()- 收益太少.永远不会有一个确切的原因,因为LWG由许多有很多观点的人组成.只有通过授予这种自由才能产生足够的额外优化机会.