相关疑难解决方法(0)

可以std :: vector使用小缓冲区优化吗?

我今天和我的同事想知道是否可以实现std :: vector来利用小缓冲区优化.通过查看C++ 11草案,我在23.3.1p8阅读

表达式a.swap(b),对于除数组之外的标准容器类型的容器a和b,应交换a和b的值,而不对单个容器元素调用任何移动,复制或交换操作.

这开始似乎取决于小缓冲区优化,但在as-if规则下,我们将被允许仍然对非类类型进行小缓冲区优化(因为我们无法观察到正在完成的复制).下一个文字似乎更难"傻瓜"

在交换之前引用一个容器中的元素的每个迭代器应该在交换之后引用另一个容器中的相同元素.

这是否足以阻止为std :: vector实现小缓冲区优化?有没有其他的路障或最终有可能有SBO的std :: vector?

c++ stdvector c++11

48
推荐指数
1
解决办法
3858
查看次数

是否保证std :: vector默认构造不会调用new?

根据引用,simple std::vector<T> vec;创建了一个emtpy容器(默认构造函数).这是否保证没有动态内存分配?或者一个实现可能选择保留一些内存?

我知道,对于这个空构造函数,T自C++ 11以来没有类型的构造.但是,我想知道,如果还保证堆上没有分配任何内容.即上面的行只是nullptr堆栈/成员上的几个.

我用vc140测试了它,它确实没有动态分配.

c++ memory-management stdvector

20
推荐指数
2
解决办法
1827
查看次数

跨流行工具链的标准容器重新分配乘数

容器喜欢std::basic_stringstd::vector在内部容量耗尽时执行自动重新分配.该标准规定,在重新分配后,.capacity() >= .size().

在执行重新分配时,主流工具链使用了哪些实际乘数?


更新

到目前为止,我有:

Dinkumware:1.5(配备MSVS和可能的ICC)

GNU libstdc ++:2(附带GCC和可能的ICC)

RW/Apache stdcxx:1.618

STLport:2

c++ implementation containers

6
推荐指数
1
解决办法
393
查看次数