Информация об изменениях

Сообщение Re: stl map много занимает пямяти от 25.08.2015 13:27

Изменено 25.08.2015 13:28 TimurSPB

Здравствуйте, kgrach, Вы писали:

K>Есть map<__int64, __int64>. Вставляю в него 10 млн элементов.


K>Измеряю сколько это хозяйство занимает в памяти места получается ~650 Мб.

K>При том, что сами данные грубо занимают ~160 Мб.

K>Как снизить издержки по памяти? Функциональность мap-а терять не хочется.


А если так:

#include <boost/pool/pool_alloc.hpp>

MEMORYSTATUSEX mem1 ={0}, mem2 ={0}, mem3 ={0};

mem1.dwLength = sizeof(mem1);
mem2.dwLength = sizeof(mem2);

GlobalMemoryStatusEx(&mem1);

typedef std::less<__int64> Int64Compare;
typedef std::pair<__int64, __int64> Int64Pair;
typedef boost::pool_allocator<Int64Pair> Int64Pool;
typedef std::map<int, __int64, Int64Compare, Int64Pool> Int64Map;
Int64Map mm1;

for (__int64 i=0; i<10000000; i++){
    mm1[i] = i;
}

GlobalMemoryStatusEx(&mem2);
Re: stl map много занимает пямяти
Здравствуйте, kgrach, Вы писали:

K>Есть map<__int64, __int64>. Вставляю в него 10 млн элементов.


K>Измеряю сколько это хозяйство занимает в памяти места получается ~650 Мб.

K>При том, что сами данные грубо занимают ~160 Мб.

K>Как снизить издержки по памяти? Функциональность мap-а терять не хочется.


А если так:

#include <boost/pool/pool_alloc.hpp>

MEMORYSTATUSEX mem1 ={0}, mem2 ={0}, mem3 ={0};

mem1.dwLength = sizeof(mem1);
mem2.dwLength = sizeof(mem2);

GlobalMemoryStatusEx(&mem1);

typedef std::less<__int64> Int64Compare;
typedef std::pair<__int64, __int64> Int64Pair;
typedef boost::pool_allocator<Int64Pair> Int64Pool;
typedef std::map<__int64, __int64, Int64Compare, Int64Pool> Int64Map;
Int64Map mm1;

for (__int64 i=0; i<10000000; i++){
    mm1[i] = i;
}

GlobalMemoryStatusEx(&mem2);