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又有啥用?
望大神们解答……
...全文
132 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟豆豆 2015-09-15
  • 打赏
  • 举报
回复
CSDN越来越没人气了…… 好啦,WIN7有个很实用的占用资源分析器,仔细观察就能发现其实不是没分配内存,而是有一部分被系统调度为可共享使用的内存了,实际占用的总内存还是包括分配内存的,光看资源管理器不严谨,好了,结贴吧,算是自己回答自己问题。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧