The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
утечка памяти, !*! fura13, 19-Май-04, 16:55  [смотреть все]
  Есть такой тип в C++ string . Приведу пример :
int main(void)
{
string s;
s = "any text";
return 0;
}
Вот там где s = "any text" выделяется память под переменную s . Память берется из кучи (heap). Так вот он память не возвращает, пока не не произойдет завершение процесса и высвобождает память уже сама операционная система. Подскажите способ как эту память все таки удалить до завершения процесса?
  • утечка памяти, !*! Alexander S. Salieff, 17:29 , 19-Май-04 (1)
    >  Есть такой тип в C++ string . Приведу пример :
    >
    >int main(void)
    >{
    >string s;
    >s = "any text";
    >return 0;
    >}
    >Вот там где s = "any text" выделяется память под переменную s
    >. Память берется из кучи (heap). Так вот он память не
    >возвращает, пока не не произойдет завершение процесса и высвобождает память уже
    >сама операционная система. Подскажите способ как эту память все таки удалить
    >до завершения процесса?

    Че за бред? ;)
    Или область видимости отконфигури, чтобы при выходе из нее автоматическая переменная удалялась, или заюзай динамическое создание через указатель, и сам создавай удаляй - скока влезет...

    • утечка памяти, !*! Alexander S. Salieff, 17:31 , 19-Май-04 (2)
      Не, ну блин... Утечка... Е-мае ;)))))
      А вот ты говоришь main(){int a=10;}, и там аж 4 байта резервируюцца. И удаляюцца ведь, гады, только по завершении процесса ;)))) Тоже утечка? ;) Кругом одни утечки тогда, хз, куда от них дется ;)))))
  • утечка памяти, !*! AnToXa, 17:34 , 19-Май-04 (3)
    >  Есть такой тип в C++ string . Приведу пример :
    >
    >int main(void)
    >{
    >string s;
    >s = "any text";
    >return 0;
    >}
    >Вот там где s = "any text" выделяется память под переменную s
    >. Память берется из кучи (heap). Так вот он память не
    >возвращает, пока не не произойдет завершение процесса и высвобождает память уже
    >сама операционная система. Подскажите способ как эту память все таки удалить
    >до завершения процесса?

    вы бредите.
    автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main и вызывается деструктор std::string который освобождает память.
    сделайте простейший враппер над std::string и увидите.


    • утечка памяти, !*! Alexander S. Salieff, 17:50 , 19-Май-04 (4)
      >вы бредите.
      >автоматическая переменная типа std::string уничтожается при раскрутке стека перед выходом из main
      >и вызывается деструктор std::string который освобождает память.
      >сделайте простейший враппер над std::string и увидите.

      Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему компилятор не догадался, что автору больше не нужна автоматическая переменная, и не удалил ее до выхода из области видимости? ;))) А ведь мог бы, если бы захотел и постарался ;)))
      Блин, я ща помру ;)

      Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием "Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп?

      • утечка памяти, !*! AnToXa, 18:02 , 19-Май-04 (5)
        >Я не думаю, что человеку ведомы раскрутки стека, вероятно он это и
        >имел ввиду под словом "высвобождает сама операционная система" (интересно, каким именно
        >образом он отслеживал точку высвобождения? ;). Автора возмущает сам факт, почему
        >компилятор не догадался, что автору больше не нужна автоматическая переменная, и
        >не удалил ее до выхода из области видимости? ;))) А ведь
        >мог бы, если бы захотел и постарался ;)))
        >Блин, я ща помру ;)

        хех, ну раскрутку стека производит libstdc++ все-таки, а не система :)

        >Почему люди не считают нужным хотя бы ознакомится с ртфмом под названием
        >"Язык С++" авторства малоизвестного человека по имени Бьярн Страуструп?
        такие вот они, люди :)
        почему вы думаете большинство "программистов на C++" используют язык как C с классами, имхо отсюда большинство нападок на C++.

        ладно, старческое ворчание :)

        • утечка памяти, !*! fura13, 08:29 , 20-Май-04 (6)
            Извиняюсь что не правильно поставил вопрос. Да к сожалению я не очень пока хорошо знаю С++. Я хотел узнать нет ли в типе string явнового способа для высвобождения памяти. Про область видимости я знаю, не могу понять почему память не высвобождается. String у меня находится в структуре которую я размещаю в динамической памяти. Стринг у меня в структуре статик, ну т.е. :
          struct st{
            int name;
            string s;
          };
          Программа у меня в идеале должна работать довольно долго(бесконечно). Но работает всего четыре дня(запускаю с помощью nohup). По команде top явно видно что растет size и res.
          • утечка памяти, !*! SergeiZz, 09:38 , 20-Май-04 (7)
            >  Извиняюсь что не правильно поставил вопрос.
            Вопрос поставлен правильно, но вопрос детский...

            >Да к сожалению я не очень пока хорошо знаю С++.
            ...И форум -- не лучшее место для его изучения...

            >Я хотел узнать нет ли
            >в типе string явнового способа для высвобождения памяти.
            Есть, ессестввенно.

            >String у
            >меня находится в структуре которую я размещаю в динамической памяти. >Стринг у меня в структуре статик,
            Это неверное заключение. Статик -- это совсем другое.

            >ну т.е. :
            >struct st{
            >  int name;
            >  string s;
            >};
            > Программа у меня в идеале должна работать довольно долго(бесконечно). Но работает
            >всего четыре дня(запускаю с помощью nohup). По команде top явно видно
            >что растет size и res.
            Как только возникнет необходимость освободить память, выделенную под s
            (а когда это будет знаете только Вы сами), вызовите явно деструктор string:

            string str= "Hello!";
            // ...
            str.~string();

            Читать по C++ рекомендую недавно изданную книгу Лафоре:
            http://www.books.ru/shop?search_type=+&query=КЮТНПЕ&x=0&y=0

            • утечка памяти, !*! AnToXa, 15:54 , 20-Май-04 (8)
              >>String у
              >>меня находится в структуре которую я размещаю в динамической памяти. >Стринг у меня в структуре статик,
              >Это неверное заключение. Статик -- это совсем другое.
              угу, это не static, это просто "by value".


              >>всего четыре дня(запускаю с помощью nohup). По команде top явно видно
              >>что растет size и res.
              скорее всего память растет не из-за string :)
              может быть из-за того, что вы просто не делаете delete на эту самую свою структуру

              >Как только возникнет необходимость освободить память, выделенную под s
              >(а когда это будет знаете только Вы сами), вызовите явно деструктор string:
              >
              >
              >string str= "Hello!";
              >// ...
              >str.~string();
              для очистки string лучше использовать str.clear(), ибо явно вызывая деструктор можно поиметь некоторые проблемы, ибо насколько я помню стандарт не оговаривает, что деструктор должен оставлять объект в consistent state, и даже если в конкретной реализации это так, то все равно можно нарваться на двойной вызов деструктора.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру