当调整std :: vector(通过reserve()或resize())时,默认分配器会做什么?
内部使用的内存块std::vector实际上已调整大小.
分配新的存储器块,将数据std::move从旧的存储器块移动(例如,d)到新的存储器块,最后解除分配旧的存储器块.
C++分配器不支持像C这样的东西realloc.每当vector需要更多内存时,它必须分配新存储,从旧移动到新移动,并释放旧存储.
无论哪种方式,realloc都不适合vector.对于典型的分配器,realloc如果缩小其大小,或者在某些情况下仅增加几个字节,则只会为您节省大量复制操作.vector永远不会缩小,它只会以非常大的步伐增长.
请注意,移动支持是C++ 2011中的一种新行为.以前的版本将复制.
| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |