Утечки памяти в .NET C ++ при использовании старого синтаксиса? - PullRequest
1 голос
/ 21 декабря 2011

Я работаю над проблемой утечки памяти в моем приложении.Я сузил его до старого синтаксиса, чтобы объявить тип «Single».Создано тестовое приложение с объявлением, и оно разрушается после использования большого количества памяти.Что мне не хватает?

Код теста здесь:

#include "stdafx.h"

using namespace System;

int main()
{
    while(1)
    {
        System::Single * sngTemp =  new System::Single(0.0);
        //System::String  ^sngTemp =  gcnew System::String(S"dsfasdfasdf");
    }
    return 0;
}

1 Ответ

5 голосов
/ 21 декабря 2011

Это не проблема «старого синтаксиса» против «нового синтаксиса» - C ++ / CLI будет иметь такое же поведение. System::Single - это псевдоним для float, который может быть размещен в стеке, неуправляемой куче или управляемой куче.

Здесь, поскольку вы используете неокрашенный new, вы выделяете его в неуправляемой куче, т. Е. Делаете точно так же, как:

float* sngTemp = new float(0.0);

Почему нельзя ожидать, что это протечет? Если вы хотите сборку мусора, используйте управляемое размещение
(__gc new в старом синтаксисе); или, что еще лучше, вообще не выделяйте типы значений в куче, что делает его беспроблемным.

...