На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (245) « Первая ... 174 175 [176] 177 178 ...  244 245  ( Перейти к последнему сообщению )  
> Есть ли будущее у DELPHI?
    Цитата korvin @
    Если она освободит память, то в чем ты видишь утечку?

    ОС освободит память когда завершиться программа, а если эта программа висит 24/7/365, то очень скоро она упадет по out of memory. Что и требовалось доказать, под утечкой памяти можно понимать нерациональное использование памяти. Пусть у тебя хоть будут ссылки на неосвобожденую память хоть нет, факт состоит в том, что ты не очистил не нужную память, тем самым уменьшил ее кол-во для приложения и ОС в целом.

    Добавлено
    Цитата --Ins-- @
    не надо рассматривать это определение буквально, иначе с этой точки зрения в Delphi тоже утечек быть не может

    Так я им это и пытаюсь втереть, а они все как мантру вторят : "Мы говорим о языках с GC"... :D
      Цитата D_KEY @
      Что это меняет, если объекты не будут удалены?

      То, что это "a programming or design error, but is not a memory leak". Если я в плюсах буду держать список объектов, это тоже утечка? Может тогда вообще любое динамическое выделение памяти -- это утечка? Давайте юзать только стек.

      Добавлено
      Цитата KILLER @
      ОС освободит память когда завершиться программа, а если эта программа висит 24/7/365, то очень скоро она упадет по out of memory.

      В том примере ты выделяешь память один раз, с чего бы ей падать от Out Of Memory?
        да, чую программисты будущего будут делать круглые глаза - спрашивая, что такое delete. а на просьбу написать ручками, скажем, двунаправленный список, юзаемый по принципу скользящего окна, реагировать конвульсиями :D
          Цитата --Ins-- @
          Нет, не надо рассматривать это определение буквально, иначе с этой точки зрения в Delphi тоже утечек быть не может, т.к. чисто теоретически все ссылки на выделенную память храняться в структурах менеджера памяти и тоже теоретически достижимы. Но фактически то, что описал Jack - утечка, ибо этот ресурс фактически уже никто не освободит

          Теоретически? Что это значит? Для программы достижимы?

          ExpandedWrap disabled
            procedure Make;
            var P : ^Integer;
            begin
              New(P);
            end;
             
            begin
              Make;
              // как мне здесь удалить память, выделенную для P?
            end.
            Во шо я надыбал
            Java memory leaks
              Цитата korvin @
              То, что это "a programming or design error, but is not a memory leak".

              А с чего ты решил, что это фраза верна? Называй как хочешь, но память-то течет :D

              Цитата
              Если я в плюсах буду держать список объектов, это тоже утечка?

              Ты почему-то подходишь с формальной точки зрения, хотя у нас тут вполне реальная ситуация. Формально(для сборщика) утечки нет, поскольку ссылка есть и объект доступен. Но реально-то программа течет.

              Добавлено
              Цитата _lcf_ @
              да, чую программисты будущего будут делать круглые глаза - спрашивая, что такое delete. а на просьбу написать ручками, скажем, двунаправленный список, юзаемый по принципу скользящего окна, реагировать конвульсиями :D

              Так уже :lol:
                Цитата korvin @
                В том примере ты выделяешь память один раз, с чего бы ей падать от Out Of Memory?

                Ну так у меня там и нет кода, который бы запустил программу на такое время как в указаном примере, но тебя ведь это не смутило? :D
                  Цитата korvin @
                  Теоретически? Что это значит? Для программы достижимы?


                  Прикинь, да ;) Менеджер памяти знает о памяти все, в том числе где и что он выделили и что освободил или нет - так и работают инструменты следящие за учетками. Работая с менеджером памяти напрямую, все ссылки на выделенную им память можно получить. Но сути это не меняет, никто таким образом память освобождать не будет и с каждым таким ляпом память будет утекать, пока однажды не закончится. Как в в случае, приведенным Джеком.

                  Добавлено
                  Утечкой памяти нужно считать не теоретически недостижимую ссылку, а фактически недостижимую для удаления ссылку
                  Сообщение отредактировано: --Ins-- -
                    Цитата D_KEY @
                    А с чего ты решил, что это фраза верна? Называй как хочешь, но память-то течет :D

                    Ты почему-то подходишь с формальной точки зрения, хотя у нас тут вполне реальная ситуация. Формально(для сборщика) утечки нет, поскольку ссылка есть и объект доступен. Но реально-то программа течет.

                    Т.е. неограниченно растущий кэш -- это тоже утечка памяти? Ок...
                      Цитата korvin @
                      Т.е. неограниченно растущий кэш -- это тоже утечка памяти? Ок...

                      А что, "нужно" и "забыл" - это слова синонимы? :o

                      Добавлено
                      korvin, почему ты баг пытаешься представить фичей?

                      Добавлено
                      Одно дело, когда тебе для работы программы нужно 15 гигабайт оперативы, и ты хоть усрись, при меньшем объеме бьудут жуткие тормоза и невозможно будет работать. Тут если у тебя всего в наличии 3 гига, то тебе нужно докупать оборудование, в нашем примере - еще 12 гигов рамы. А другое дело, когда у тебя приложение жрет 15 гигабайт памяти, просто так, потому что программист забыл отписаться от события. И тут уже нужно не железо покупать, а прогу фиксить.

                      Добавлено
                      А чо и правда, то что на вики приведено:
                      ExpandedWrap disabled
                        #include <stdlib.h>
                         
                        int main(void)
                        {
                             /* this is an infinite loop calling the malloc function which
                              * allocates the memory but without saving the address of the
                              * allocated place */
                             while (malloc(50)); /* malloc will return NULL sooner or later, due to lack of memory */
                             return 0;  /* free the allocated memory by operating system itself after program exits */
                        }

                      Является своего рода неограниченно растущим кэшем :-?
                        Цитата KILLER @
                        korvin, почему ты баг пытаешься представить фичей?

                        Не пытаюсь, ты упустил что-то. Я пытаюсь объяснить, что у этого бага несколько иная природа, и дабы отделять его от других багов не стоит называть его так же.
                          Цитата korvin @
                          Не пытаюсь, ты упустил что-то. Я пытаюсь объяснить, что у этого бага несколько иная природа, и дабы отделять его от других багов не стоит называть его так же.

                          Ок.
                          Отвечу на твой предыдущий вопрос твоей же логикой:
                          Цитата korvin @
                          procedure Make;
                          var P : ^Integer;
                          begin
                          New(P);
                          end;

                          begin
                          Make;
                          // как мне здесь удалить память, выделенную для P?
                          end.

                          Очень просто, всеголишь вместо процедуры юзнуть функцию, которая будет возвращать твой указатель и удалить его после вызова make. Какие проблемы? Это аналогичные баги, только в одном случае программист забыл написать delete, в другом случае - забыл отписаться от события.
                          То что там было приведено с тем же for:
                          ExpandedWrap disabled
                            for(int i = 0; i < 100; ++i)
                            {
                               int* p = new int[100];
                            }

                          Тут тоже нет утечки, так как по твоей же логике, откуда ты знаешь зачем я это написал? А может это я специально сделал, чтоб потом дописать:
                          ExpandedWrap disabled
                            for(int i = 0; i < 100; ++i)
                            {
                               int* p = new int[100];
                             
                               SomeFunc(p);
                             
                               delete [] p;
                            }

                          Так сказать неограниченно растущий кэш - не является мем. ликом. :D

                          Добавлено
                          Цитата korvin @
                          дабы отделять его от других багов не стоит называть его так же.

                          А как это называется? Самая что нинаесть утечка памяти. Потому что GC ее не очистит, ибо ссылка валидная, и ты ссылку не прибьешь, ибо забыл про нее. А еще ты пропустил один интересный вопрос к тебе:
                          Цитата MyNameIsIgor @
                          Например, в случае C# - там, ЕМНИП, отписка от события происходит по объекту. Поэтому, если ты потерял ссылку на объект, то и отписаться не сможешь - ты не имеешь доступа к объекту, так почему это не утечка?
                          Сообщение отредактировано: KILLER -
                            Цитата KILLER @
                            А как это называется? Самая что нинаесть утечка памяти. Потому что GC ее не очистит, ибо ссылка валидная, и ты ссылку не прибьешь, ибо забыл про нее. А еще ты пропустил один интересный вопрос к тебе:
                            Цитата (MyNameIsIgor @ Сегодня, 14:38)
                            Например, в случае C# - там, ЕМНИП, отписка от события происходит по объекту. Поэтому, если ты потерял ссылку на объект, то и отписаться не сможешь - ты не имеешь доступа к объекту, так почему это не утечка?

                            Строго говоря, объект доступен через Delegate.Target
                              Цитата KILLER @
                              Отвечу на твой предыдущий вопрос твоей же логикой:
                              Цитата korvin @
                              procedure Make;
                              var P : ^Integer;
                              begin
                              New(P);
                              end;

                              begin
                              Make;
                              // как мне здесь удалить память, выделенную для P?
                              end.

                              Очень просто, всеголишь вместо процедуры юзнуть функцию

                              Это не ответ, ты изменил условие.

                              Цитата KILLER @
                              А еще ты пропустил один интересный вопрос к тебе:

                              Вообще-то я на него ответил, смотри внимательней тред.
                                Цитата korvin @
                                Это не ответ, ты изменил условие.

                                А ты не менял условие? Изначальное условие состояло в том, что никому не нужная память висит просто так, и никто ее не очистит. Ты начал придумывать будто она уже нужна... Ну и я тоже начал придумывать.

                                Добавлено
                                Просто когда память закончится, что моя программа, что твоя - обе упадут по out of memory. И виной будет именно нерациональное использование памяти что в твоем, что в моем случае, утечка памяти попросту говоря. Так как ты не знаешь какую память тебе нужно освободить. И мне почему то кажется, что в твоем случае просто так, как ты говоришь не сделаешь, нужно еще найти эту ненужную ссылку.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (245) « Первая ... 174 175 [176] 177 178 ...  244 245


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1632 ]   [ 15 queries used ]   [ Generated: 21.12.25, 07:53 GMT ]