Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Karrde
0 / 0 / 0
Регистрация: 25.02.2008
Сообщений: 17
#1

Освобождение памяти массивов

24.10.2010, 00:57. Просмотров 1780. Ответов 8
Метки нет (Все метки)

Можно ли c++/cli освобождать память managed массивов вручную, не дожидаясь сборщика мусора, по аналогии с dispose в c#?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2010, 00:57
Ответы с готовыми решениями:

Освобождение памяти
Доброго времени суток. Умные люди подкажите, плз. Как в c++ cli освободить...

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления...

Освобождение массивов на языке C
Всем доброго времени суток! Изучал исходники численных методов из книги...

Освобождение памяти
При работе со спрайтами после 3 удара спрайта об стенку экрана, программа...

Освобождение памяти
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с...

8
HIMen
4259 / 1426 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
24.10.2010, 01:14 #2
C++
1
2
3
auto arr = gcnew array<int>(100000000);
delete[] arr;
GC::Collect();
1
NightmareZ
1424 / 612 / 59
Регистрация: 31.03.2009
Сообщений: 1,986
24.10.2010, 01:16 #3
Я могу конечно ошибаться, но мне кажется что это ересь:

Цитата Сообщение от HIMen Посмотреть сообщение
C++
1
delete[] arr;
0
HIMen
4259 / 1426 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
24.10.2010, 01:21 #4
NightmareZ,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using namespace System;
 
int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    auto arr = gcnew array<int>(100000000);
    Console::WriteLine(L"created");
    Console::ReadLine();
    delete[] arr;
    GC::Collect();
    Console::WriteLine(L"deleted");
    Console::ReadLine();
    return 0;
}
Посмотри на память в диспетчере задач
1
NightmareZ
1424 / 612 / 59
Регистрация: 31.03.2009
Сообщений: 1,986
24.10.2010, 01:36 #5
Цитата Сообщение от HIMen Посмотреть сообщение
Посмотри на память в диспетчере задач
Посморел действительно удаляется. Но, если сделать вместо
C++
1
delete[] arr;
вот так
C++
1
arr = nullptr;
то эффект тот же. Собсно сам delete[] массив не удаляет, удаляет его GC.Collect(). Получается, delete[] - синтаксический сахар, на самом деле присваивающий ссылке null?

Добавлено через 4 минуты
В рефлекторе сейчас посмотрел. Таки оба варианта одинаковый CIL-код создают.

Добавлено через 2 минуты
Цитата Сообщение от Karrde Посмотреть сообщение
по аналогии с dispose в c#?
Dispose в C# не освобождает память.
1
HIMen
4259 / 1426 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
24.10.2010, 01:40 #6
Цитата Сообщение от NightmareZ Посмотреть сообщение
то эффект тот же. Собсно сам delete[] массив не удаляет, удаляет его GC.Collect(). Получается, delete[] - синтаксический сахар, на самом деле присваивающий ссылке null?
А, ну да, получается так.
1
Karrde
0 / 0 / 0
Регистрация: 25.02.2008
Сообщений: 17
24.10.2010, 02:18  [ТС] #7
Спасибо)
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 87
21.05.2011, 16:12 #8
оператор nullptr не очищает память. Попробуйте сами создать два указателя, которые ссылаются на один и тот же участок памяти, а затем одному из них присвоить nullptr. Вы увидите, что через второй указать вы будете прекрасно работать с памятью. Первый оператор просто после такой операции указывает на пустоту
0
NightmareZ
21.05.2011, 16:18     Освобождение памяти массивов
  #9

Не по теме:

Цитата Сообщение от KODAGEN Посмотреть сообщение
оператор nullptr не очищает память. Попробуйте сами создать два указателя, которые ссылаются на один и тот же участок памяти, а затем одному из них присвоить nullptr. Вы увидите, что через второй указать вы будете прекрасно работать с памятью. Первый оператор просто после такой операции указывает на пустоту
Капитан Очевидность?

Мне кажется, в этой теме уже всё, что надо было, выяснили.

0
21.05.2011, 16:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2011, 16:18
Привет! Вот еще темы с ответами:

Освобождение памяти
Похоже что проблема с освобождением памяти. У меня есть абстрактный класс...

Освобождение памяти
Как сделать, чтобы при вызове деструктора экземпляра i класса image, вызвался и...

Освобождение памяти в Qt
Представим ситуацию: я написал программу, в которой все потомки соединены с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru