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

    кстати
    я тут немного посмотрел на Weak Boxes в Racket
    Цитата

    A weak box is similar to a normal box (see Boxes), but when the garbage collector (see Garbage Collection) can prove that the content value of a weak box is only reachable via weak references, the content of the weak box is replaced with #f.

    и немного не понял:
    ExpandedWrap disabled
      #lang racket
       
      (define (make-weak-ref value)
        (values value (make-weak-box value)))
       
      (define (test)
        (define-values (val ref) (make-weak-ref "foo"))
        (displayln val)
        (displayln (weak-box-value ref))
        ref)
       
      (define (main)
        (define ref (test))
        (collect-garbage)
        (sleep 2)
        (collect-garbage)
        (displayln (weak-box-value ref)))
       
      (main)

    =>
    ExpandedWrap disabled
      Добро пожаловать в DrRacket, версия 5.3 [3m].
      Язык: racket; memory limit: 512 MB.
      foo
      foo
      foo
      >

    по идее вместо третьего вывода foo должно было вывести #f, но почему-то нет. =/


    Добавлено
    Цитата jack128 @
    да вот нет, утечки памяти возможны и при ошибках в прикладном коде. Банально сохраняем ссылки на локальный объект в глобальном листе и забывает удалять эти ссылки, вот те банальная утечка.

    Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы, до него можно добраться и убрать эту ссылку. Утечка бы возникла, если бы GC видел недоступный элемент как доступный и при очередном проходе например копировал бы его (если это копирующий GC) вместе со всеми остальными доступными, тогда ты бы ничего не смог с ним сделать.

    Добавлено
    Цитата jack128 @
    от циклических ссылок, насколько я понимаю, избавляет тотальная иммутабельность.

    ExpandedWrap disabled
      data Cycle a = Cyc a (Cycle a)
       
      c :: Cycle Int
      c = Cyc 1 c
       
      showCycle :: Show a => Int -> Cycle a -> String
      showCycle n (Cyc x c) = if n > 0
          then show x ++ showCycle (n - 1) c
          else ""
       
      main = putStrLn $ showCycle 5 c

    ExpandedWrap disabled
      GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
      ...
      Prelude> :load "test.hs"
      [1 of 1] Compiling Main             ( test.hs, interpreted )
      Ok, modules loaded: Main.
      *Main> :main
      11111
      (0.00 secs, 2327332 bytes)
      *Main>
    Сообщение отредактировано: korvin -
      Цитата korvin @
      Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы, до него можно добраться и убрать эту ссылку. Утечка бы возникла, если бы GC видел недоступный элемент как доступный и при очередном проходе например копировал бы его (если это копирующий GC) вместе со всеми остальными доступными.

      А что тогда такое утечка памяти? :o
        Цитата KILLER @
        А что тогда такое утечка памяти? :o

        По-моему в цитируемом тобой предложении есть ответ на твой вопрос.
          Цитата korvin @
          По-моему в цитируемом тобой предложении есть ответ на твой вопрос.

          Ну так ты поясни, а то не совсем понятно, если я забыл освободить память это утечка или нет?
            Цитата KILLER @
            Ну так ты поясни, а то не совсем понятно, если я забыл освободить память это утечка или нет?

            При чем тут ты?

            Цитата
            A memory leak, in computer science (or leakage, in this context), occurs when a computer program acquires memory but fails to release it back to the operating system. In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.

            http://en.wikipedia.org/wiki/Memory_leak
              Цитата korvin @
              При чем тут ты?

              Ты на вопрос ответишь или так и будешь ёрзать туда сюда?
                Цитата korvin @
                Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы

                Так в этом и заключается утечка :) Объект не нужен, но ссылка есть - память не удаляем.
                  Цитата KILLER @
                  Ты на вопрос ответишь или так и будешь ёрзать туда сюда?

                  Ок, ответ: это зависит от ситуации. Если ссылка еще достижима и объект может быть удален, то нет, это пока еще не утечка. Как только последняя ссылка потеряется и объект не будет удален при этом, а так и останется висеть, то все, утекла память. Это было написано в моем сообщении, которое ты процитировал, я не знаю как тебе еще объяснить.

                  Добавлено
                  Цитата D_KEY @
                  Так в этом и заключается утечка :) Объект не нужен, но ссылка есть - память не удаляем.

                  Нет, утечка образуется, когда объект становится в принципе не достижим, например если имеем подсчет ссылок без контроля циклических зависимостей.
                    Цитата korvin @
                    это зависит от ситуации. Если ссылка еще достижима и объект может быть удален, то нет, это пока еще не утечка. Как только последняя ссылка потеряется и объект не будет удален при этом, а так и останется висеть, то все, утекла память. Это было написано в моем сообщении, которое ты процитировал, я не знаю как тебе еще объяснить.

                    Я именно это и хотел услышать. Выходит, что если я выделил память по new и банально забыл вызвать delete, то это не утечка памяти, ведь я в любой момент, когда захочу просто вызову в нужном месте оператор delete. Так выходит? :D
                      Цитата KILLER @
                      Я именно это и хотел услышать. Выходит, что если я выделил память по new и банально забыл вызвать delete, то это не утечка памяти, ведь я в любой момент, когда захочу просто вызову в нужном месте оператор delete. Так выходит? :D

                      Так ты забыл вызвать delete или вызвал его в нужном месте?

                      И для справки: мы о GC говорим так-то.
                        Цитата korvin @
                        Так ты забыл вызвать delete или вызвал его в нужном месте?

                        Забыл вызвать delete. точно также как:
                        Цитата jack128 @
                        локальный объект подписывается на событие, которое генерит глобальный. А отписаться - забывает.


                        Добавлено
                        Цитата korvin @
                        И для справки: мы о GC говорим так-то.

                        Ааа, вона как, а я думал что об утечке памяти...
                          Цитата korvin @
                          Нет, утечка образуется, когда объект становится в принципе не достижим.

                          Что значит нет, если память не удаляется и ненужные уже объекты продолжают занимать память?
                          Сообщение отредактировано: D_KEY -
                            Цитата KILLER @
                            Забыл вызвать delete.

                            И ссылку потерял?

                            Цитата KILLER @
                            точно также как:

                            Не точно так же.

                            Цитата KILLER @
                            Ааа, вона как, а я думал что об утечке памяти...

                            Об утечках памяти при использовании GC. Так понятней?
                              Цитата D_KEY @
                              Что значит нет, если память не удаляется и ненужные уже объекты продолжают занимают память?

                              А что тут удивляться, на них же есть ссылки! :o :D
                                Цитата korvin @
                                И ссылку потерял?

                                Где?

                                Цитата korvin @
                                Не точно так же.

                                Обоснуй.

                                Цитата korvin @
                                Об утечках памяти при использовании GC. Так понятней?

                                Так по твоей логике просто выходит что на С++ можно и вовсе не вызывать free/delete. Достаточно вызвать malloc/new и все. А когда программа завершиться, ОС всеравно освободит всю память выделенную программой, а если мы не вызывали очистку памяти, значит она нам нужна якобы, ну и что что мы ей больше не пользуемся...
                                Сообщение отредактировано: KILLER -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (245) « Первая ... 171 172 [173] 174 175 ...  244 245


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