Жрет память.
{
char Field1[60];
char Field2[8];
char Field3[8];
} Struct1;
typedef struct
{
char Field1[256];
char Field2[256];
} Struct2;
есть контейнеры:
typedef multimap<int, Struct2> Map2;
передаю эти два контейнера в поток через конструктор по ссылке:
Map2 &Data2)
{
MapData1 = Data1;
MapData2 = Data2;
}
объявлены контейнеры в классе потока:
Map2 MapData2;
и вот когда поток получает контейнеры прога в памяти занимает 30 метров!!!
Почему так много?
Еще одна проблема возникла: по завершении потока я его уничтожаю (delete) а память не освобождается, почему?
еще уточнение записей в первом контейнере 50000, во втором 15.
Еще одна проблема возникла: по завершении потока я его уничтожаю (delete) а память не освобождается, почему?
Я вот одного не пойму... какой смысл передавать что-либо по ссылке, если потом опять же производить копирование обьектов? Передавайте по значению
Я вот одного не пойму... какой смысл передавать что-либо по ссылке, если потом опять же производить копирование обьектов? Передавайте по значению
я вот тоже смысла большого не вижу, но память жрать на 4 метра больше начинает!
а как для контейнеров деструкторы вызвать, что-то у меня не получается, а мне кажется все дело в них?
Есть структуры:
{
char Field1[60];
char Field2[8];
char Field3[8];
} Struct1;
typedef struct
{
char Field1[256];
char Field2[256];
} Struct2;
есть контейнеры:
typedef multimap<int, Struct2> Map2;
передаю эти два контейнера в поток через конструктор по ссылке:
Map2 &Data2)
{
MapData1 = Data1;
MapData2 = Data2;
}
объявлены контейнеры в классе потока:
Map2 MapData2;
и вот когда поток получает контейнеры прога в памяти занимает 30 метров!!!
Почему так много?
Для начала - как правило не стоит помещать в контейнер объект - в большинстве задач достаточно указатель. Во вторых - перед удалением контейнера - очищай его.
Ну а все остальное - по приведенному коду сказать сейчас сложно - начни с анализа логики программы. Ну и надо учитывать - контейнеры не самая дешевая по памяти вещь.
З.Ы. А что у тебя реализует связка мап+мультимап? Просто, таким они используются достаточно редко - и как правило это говорит о ошибке проектирования.
Я вот одного не пойму... какой смысл передавать что-либо по ссылке, если потом опять же производить копирование обьектов? Передавайте по значению
Смысл в том, что при передаче обекта передается копия, тем самым сжирая память и время!
Смысл в том, что при передаче обекта передается копия, тем самым сжирая память и время!
Угу, особенно в этом случае, когда для объектов переданных по ссылке создается ровно два новых объекта того же типа и вызывается operator=
Для начала - как правило не стоит помещать в контейнер объект - в большинстве задач достаточно указатель. Во вторых - перед удалением контейнера - очищай его.
я его очищаю методом clear(); а возможности удалить как я понял нет. Он удаляется при удалении класса?!
З.Ы. А что у тебя реализует связка мап+мультимап? Просто, таким они используются достаточно редко - и как правило это говорит о ошибке проектирования.
{
char Field1[60];
char Field2[8];
char Field3[8];
} Struct1;
typedef map<AnsiString, Struct1> Map1;
Да я в STL новичок, вообще используя контейнеры (ассоциатьивный массив) преследовал несколько целей, может есть более "дешевая" замена?
Имеем следующий данные: ключевое поле (числовое, сделал AnsiString для удобства), Поле1-Поле3 данные привязанные к ключевому полю, тоже строковые.
Вот что мне нужно реализовать:
1. Поиск по ключевому полю
2. Отсутствие дубликатов
Эти данные в программу попадают из файла, потом происходит их обработка и выгрузка.