Как правильно замерять используемую память в Windows(использую win7 x64, vs2010)?
Пример кода:
void test()
{
int N=100*1000*1000;
clock_t t;
t= clock();
std::vector<int> vec;
vec.reserve(N);
vec.resize(N);
for(int i=0;i<N;++i)
{
vec[i]=10;
}
t= clock()-t;
printf("mem: %d \n",sizeof(std::vector<int>)+vec.capacity()*sizeof(int));
printf("test run: %d tics , %f sec \n",t, ((float)t)/CLOCKS_PER_SEC);
getchar();
}
Допустим хочу знать сколько места занимает vector определенного размера.
На остановке на строчке getchar() смотрю в task manager сколько места занимает программа:
Результаты:
kb N
4280 1M
39504 10M
78636 20M
391752 100M
Что то не прослеживается точной линейной зависимости, правильно ли я понимаю, что модель тут такая
N*sizeof(int)+const_vector_overhead+const_programm_overhead?
UPDATE:
Немного усложним задачу:
void test()
{
int N=10*1000*1000;
int K=10;
clock_t t;
t= clock();
std::vector<std::vector<int>> vec;
vec.reserve(N);
vec.resize(N);
for(int i=0;i<N;++i)
{
vec[i].reserve(K);
vec[i].resize(K);
for(int j=0;j<K;++j)
vec[i][j]=10;
}
t= clock()-t;
printf("mem: %d \n",sizeof(std::vector<std::vector<int>>)+vec.capacity()*sizeof(int));
printf("test run: %d tics , %f sec \n",t, ((float)t)/CLOCKS_PER_SEC);
getchar();
}
Получаем ~ 1 250 000 Kb , что примерно в 3 раза больше чем 100М vector
Еще интерестно что в vmmap heap показывается как 1 кусок ~300 Мб, много кусков по 16 192 Кб, несколько кусков еще меньшего размера, всего кусков 68.
Так что же это за куски?