использование памяти std :: deque

Использование памяти std::deque
Я пытаюсь найти использование памяти для deque,
Ниже написана простая программа на C ++, которая создает deque контейнер и толкает количество int элементы.
Я хочу пройтись по контейнеру хотя бы один раз, чтобы найти алгоритм поиска.
Мой основной акцент — понять использование памяти и рост использования памяти при увеличении количества элементов.

Я попытался проанализировать с помощью двух разных инструментов Valgrind массив и / usr / bin / time
Запустите программу с аргументами командной строки 1, 2, 3, 4 и памятью, как показано ниже

Number of Elements, heap by massif, Peak RSS (resident segment size) by top or time
1024, 4752 Bytes,   4128 Kilo Bytes
2K,   9008 Bytes,   4160 Kilo Bytes
3k,   13104 Bytes,  4176 Kilo Bytes
4k,   17520 Bytes,  4208 Kilo Bytes

Согласно valgrind, для каждых 1K элементов увеличивается примерно 4K байтов. Но записи top или / usr / bin / time показывают, что на каждые 1 КБ элементов увеличивается 16 килобайт или 32 килобайта RSS.
Элементы контейнера STL по умолчанию размещаются в куче, поэтому я ожидаю, что увеличение размера кучи, сообщаемое массивом valgrind, должно совпадать с ростом RSS, сообщаемым top или / usr / bin / time, когда число элементов увеличивается. Почему RSS увеличивается на 16 килобайт или 32 килобайта, когда увеличивается только дополнительная куча в 4 КБ? Что вызывает увеличение RSS, кроме выделения кучи? Здесь стек один и тот же, потому что одна и та же программа запускается с разными аргументами командной строки 1, 2, 3, 4.

#include <iostream>
#include <deque>
#include <cstdlib>
#include <cstdint>
#include <ctime>
#include <algorithm>
#include <sys/time.h>

int main ( int argc, char *argv[] )
{
std::deque<uint32_t>  int_deque;
int element_count = 1024*10;
if (argc > 1)
{
element_count = 1024*atoi(argv[1]);
}
--element_count;
std::srand(std::time(0));

for (int i=0; i < element_count; ++i)
{
int_deque.push_back(rand());
}

uint32_t num2 = rand();
int_deque.push_back(num2);

if (std::find(int_deque.begin(), int_deque.end(), num2) == int_deque.end())
{
std::cerr << "deque error" << std::endl;
return 1;
}
return EXIT_SUCCESS;
}

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]