|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
Освобождение памяти, занятой вектором07.09.2011, 14:30. Показов 8342. Ответов 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 | |
|
Освобождение памяти Освобождение памяти Освобождение памяти Освобождение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|