stl::vector占用内存疑问
孟豆豆 2015-07-09 04:26:09 比如:
struct MyStruct
{
double m_data[ 36 ];
};
vector< MyStruct > m_vecTest;
在资源管理器观察内存占用1540K
加上
m_vecTest.reserve( 1000000 );
在资源管理器观察内存占用2104K
增加了564K,
sizeof(MyStruct)得到288,那么1000000*288/1024=281250
可见不对等,那么我是否可以初步判断reserve并没有申请足够的内存。
继续
再加上
for ( unsigned i = 0; i < 5000; ++ i )
{
MyStruct data;
m_vecTest.push_back( data );
}
在资源管理器观察内存占用3512K
增加了1408K
计算5000*288/1024=1406.25
忽略误差,可以认为内存增长量保持一致。
我的问题是,如果reserve并不申请足够的内存,那么增加这条语句花的那么多内存用来干嘛了?都说reserve可以用来预留空间,既然它都不申请足够的空间那么它如何来预留空间?假如没有预留空间那么哪怕动态增长量还没有达到设置的预留量也必然会达到瓶颈进而需要重新分配内存块以及移动拷贝数据,那么这reserve又有啥用?
望大神们解答……