|
Модераторы: Daevaorn |
|
VirtualVoid |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Можно ли удалять не весь массив из кучи, начиная с указателя на 1-ый элемент, а только конец, начиная откуда-то?
Поясню на примере:
Т.е. удалит ли последняя строка кода элементы с 15 по 19? При компиляции компилятором от microsoft такая программа разваливается, что вполне логично. Короче суть вопроса: есть ли такой компилятор(или платформа), где подобное возможно? Подозреваю, что это можно сделать, переопределив new, delete, сделав умные указатели, но моя проблема не стОит таких усилий... |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
null56 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
VirtualVoid, поддерживаю mes, но еще есть вариант создавать массив через
Тут выделяешь участки памяти и сам их заполняешь элементами Если применить эту функцию для существующего участка памяти, в котором располагается массив, созданного функцией семейства "ALLOC", но указать размер меньше реального, то если мне не ошибает память, байты выходящие за новый размер памяти почистятся... другой вопрос, что элементы располагаемые в отсекаемом участке нужно будет чистить самому, если это динамически созданные объекты... |
|||
|
||||
Earnest |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
mes, вектор реально ничего не освобождает вплоть до удаления... впрочем, это зависит от реализации, но чаще всего память перераспределяется только в сторону увеличения.
не почистятся, а просто уменьшиться объем выделенного блока. "Чистить", т.е. чем-то заполнять никто не будет. Не знаю такого. Освобождать можно только то, что заказано. Иначе слишком усложнится работа с кучей. А ради чего? Вот-вот. Если дело идет о паре байтов, то говорить не о чем. А если о паре мегабайтов и прочих больших блоках, то имеет смысл реализовать свою схему работы с памятью, для данных конкретных объектов, конечно, и с нужными свойствами. -------------------- ... |
|||
|
||||
ИванМ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
VirtualVoid, в твоем случае не имеет смысла удалять элементы. Просто храни где-нибудь фактическое количесто элементов, а сам массив не трогай.
|
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
полагаю автору реального удаления и не надо.. мое высказывание основывалось на предположении, что автор пока сам не знает что ему требуется, но ему не хватает удобной работы с динамическим массивом. |
|||
|
||||
VirtualVoid |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Про вектор в курсе, но он только увеличивается, освобождается он и вправду сразу полностью при удалении.
Другие контейнеры тоже не особо хочется из-за быстродействия(оно сверхкритично), и опять же, дополнительная информация... Насчет реаллок.. Все выделяется через new, а стандарт не гарантирует, что там внутри что-то из семейства ALLOC, хотя фактически оно часто так и есть.
Это уже делается, хотелось бы память вычистить. Earnest, Ну это я и хотел узнать. Если нельзя, значит нельзя! Спасибо всем ответившим! Добавлено через 2 минуты и 13 секунд Надо именно реальное удаление. Иначе говоря, будь у меня изначально список, вопрос бы не стоял. |
|||
|
||||
Dov |
|
|||
аСинизатор Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
это делается примерно так:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
BlackJackal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.11.2009 Где: Красноярск Репутация: нет Всего: нет |
Тут автор блога рассказывает про прием SwapTrick для очистки вектора. Уж не знаю, насколько это удовлетворяет быстродействию, но работает. |
|||
|
||||
VirtualVoid |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Dov,
Я понимаю. В том то и дело, что мне не нужна промежуточная аллокация. Реальный объем выделенного может близко подходить к физическому размеру оперативной памяти, при выделении объема близкого к нему(arr = new int[......];), пойдет совсем ненужный своппинг. Лучше бы вобще не было такой памяти =) |
|||
|
||||
Dov |
|
|||
аСинизатор Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Это круто... и даже очень... з.ы. счас глянул, у меня на компе 2 гб оперативки... -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |