|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
Освобождение памяти, занятой вектором07.09.2011, 14:30. Показов 7956. Ответов 62
Метки нет (Все метки)
У меня задача требует чтобы у вектора было в резерве не более 100 элементов. При постоянном росте вектора понятно как это обеспечить, а вот как быть при уменьшении количества элементов? Я не в курсе последних стандартов, подскажите есть ли сейчас способы гарантированного освобождения памяти, занятой вектором, и вообще какие способы существуют?
0
|
|
| 07.09.2011, 14:30 | |
|
Ответы с готовыми решениями:
62
Освобождение неиспользуемой вектором памяти Резервирование памяти/освобождение памяти для трехмерного массива Освобождение памяти |
|
|
||||||||||||
| 07.09.2011, 19:44 | ||||||||||||
|
структуры пожалусто
0
|
||||||||||||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 07.09.2011, 19:49 | |
|
-=ЮрА=-, при malloc не вызывается конструктор (вызывать можно через placement new), при free не вызывается деструктор (можно правда напрямую вызвать ->~Type())
это как бэ не сильно удобно, да и вообще IDiscRecorder есть структура, элементы которой указатели на функции, те пример мало для объектов пригоден
0
|
|
|
|
||||||
| 07.09.2011, 19:50 | ||||||
|
-=ЮрА=-, запустите этот код:
Добавлено через 19 секунд Не по теме: Опоздал...
0
|
||||||
|
|
||
| 07.09.2011, 19:55 | ||
|
С таким же успехом преобразуюю CListCtrl * pList = (CListrCtrl *)malloc(sizeof(CListCtrl)); alex_x_x, вы работали с imapi v1?У меня даже вышло подключить IDiscMasterProgressEvents (хотя это был огромооомный гемор - в нете кучи топиков что интерфейс не работает) и сделать полнофункциональный бёрнер, так что с имапи знаком не по наслышке...
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||||||
| 07.09.2011, 20:01 | |||||||||||
|
-=ЮрА=-, я знаком с COM
для ++ интерфейс реализован как таблица виртуальных функций (v-table), но с си он имеет бинарную совместимость, так как фактически является структурой указателей на функции в коме есть нечто вроде
вы объявляете интерфейс
0
|
|||||||||||
|
|
|||||||
| 07.09.2011, 20:13 | |||||||
|
Вот код и скрин работы, предлагаю скомпилировать
0
|
|||||||
|
|
|||
| 07.09.2011, 20:16 | |||
|
PS:Создал массив объектов (классов) посредством malloc и realloc, думаю все вопроссы должны отпасть сами собой..!
Добавлено через 1 минуту
0
|
|||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 07.09.2011, 20:17 | |
|
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||||||
| 07.09.2011, 20:20 | ||||||
|
-=ЮрА=-, во-первых это подмена понятий, во-вторых
выдает сразу Segmentation fault, потому что состояние non-POD членов оказывается неопределенным (так как для них тоже конструкторы не вызываются) при их ручной инициализации в InitMSG с исползованием operator=(*) их поведение не становится определенней
0
|
||||||
|
|
||||||
| 07.09.2011, 20:23 | ||||||
|
-=ЮрА=-, вы вообще знаете, зачем нужны конструкторы и деструкторы? Вы понимаете, что конструктор вашего класса не вызывается? Проверьте:
0
|
||||||
|
|
||||||||
| 07.09.2011, 20:33 | ||||||||
0
|
||||||||
|
|
||||||
| 07.09.2011, 20:36 | ||||||
|
PS:
SimpleClass(){strcpy(sMSG,"I'm created");}//Инициализировал переменную класса void CheckStatus(){printf("%s\r\n",sMSG);} //Вывод переменной
0
|
||||||
|
|
||||||
| 07.09.2011, 20:44 | ||||||
|
-=ЮрА=-, а если после этого нужно изменить количество SimpleClass'ов? realloc? а как же деструкторы в случае уменьшения количества экземпляров или конструкторы в случае увеличения?
Добавлено через 5 минут Так вот не проще:
0
|
||||||
|
|
|||||||
| 07.09.2011, 22:13 | |||||||
0
|
|||||||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 07.09.2011, 22:33 [ТС] | |
|
Насколько мне было известно, ранее swap трюк не гарантировал освобождение памяти. В стандарте не было прописано что при этом должно выделиться меньше памяти под новый вектор. Теперь это не так?
Насчет того, что многие уверены что память вообще не нужно освобождать, в моём проекте, в тз отдельным пунктом идёт ограничение памяти под сервак 512 мегабайт. При этом нагрузка не прописана, будет работать на мощном сервере, с быстрой памятью и процом и поэтому частота переаллокаций не имеет никакого значения. А сервак - что-то типо логера, он собрал одни данные, скинул их в базу, и далее данные надо частично затереть, т.к. параллельно в разное время начинают собираться отдельные массивы, каждый около 100 мегабайт. Если не чистить, то все 10 массивов разрастутся до 1 гб, а если чистить, то вполне можно уложиться в отведенный объем озу. Т.ч. такие задачи существуют.
0
|
|
| 07.09.2011, 22:35 | ||
|
а не, понял. не скопировал присваивание.
0
|
||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 07.09.2011, 22:39 [ТС] | |
|
Linux, но вектор, всмысле stl - кроссплатформенный, поэтому задал вопрос в данном разделе
0
|
|
|
|
||||||
| 08.09.2011, 00:58 | ||||||
|
Union, вот мои эксперименты:
add 5 add 70 add 100 memstat size del 170 memstat size add 40 add 20 memstat У меня (gcc 4.6) вектор выделяет память при расширении. При уменьшении количества элементов он вызывает деструкторы (кстати, обходя void destroy( pointer )), но память не отдаёт. После уничтожения самого объекта вектора (введите quit) он отдаст память, но там уже поздновато будет.
0
|
||||||
|
|
|||
| 08.09.2011, 10:16 | |||
|
Добавлено через 1 минуту
0
|
|||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 08.09.2011, 10:54 | ||
|
правильно в вашем примере будет так и только так как у talis, с использованием placement new
0
|
||
| 08.09.2011, 10:54 | |
|
Освобождение памяти Освобождение памяти Освобождение памяти Освобождение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|