Есть ли будущее у DELPHI?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела:
| Страницы: (245) « Первая ... 171 172 [173] 174 175 ... 244 245 ( Перейти к последнему сообщению ) |
Есть ли будущее у DELPHI?
|
Сообщ.
#2581
,
|
|
|
|
кстати я тут немного посмотрел на 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. и немного не понял: ![]() ![]() #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) => ![]() ![]() Добро пожаловать в DrRacket, версия 5.3 [3m]. Язык: racket; memory limit: 512 MB. foo foo foo > по идее вместо третьего вывода foo должно было вывести #f, но почему-то нет. =/ Добавлено Цитата jack128 @ да вот нет, утечки памяти возможны и при ошибках в прикладном коде. Банально сохраняем ссылки на локальный объект в глобальном листе и забывает удалять эти ссылки, вот те банальная утечка. Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы, до него можно добраться и убрать эту ссылку. Утечка бы возникла, если бы GC видел недоступный элемент как доступный и при очередном проходе например копировал бы его (если это копирующий GC) вместе со всеми остальными доступными, тогда ты бы ничего не смог с ним сделать. Добавлено ![]() ![]() 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 ![]() ![]() 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> |
|
Сообщ.
#2582
,
|
|
|
|
Цитата korvin @ Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы, до него можно добраться и убрать эту ссылку. Утечка бы возникла, если бы GC видел недоступный элемент как доступный и при очередном проходе например копировал бы его (если это копирующий GC) вместе со всеми остальными доступными. А что тогда такое утечка памяти? |
|
Сообщ.
#2583
,
|
|
|
|
Цитата KILLER @ А что тогда такое утечка памяти? ![]() По-моему в цитируемом тобой предложении есть ответ на твой вопрос. |
|
Сообщ.
#2584
,
|
|
|
|
Цитата korvin @ По-моему в цитируемом тобой предложении есть ответ на твой вопрос. Ну так ты поясни, а то не совсем понятно, если я забыл освободить память это утечка или нет? |
|
Сообщ.
#2585
,
|
|
|
|
Цитата 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 |
|
Сообщ.
#2586
,
|
|
|
|
Цитата korvin @ При чем тут ты? Ты на вопрос ответишь или так и будешь ёрзать туда сюда? |
|
Сообщ.
#2587
,
|
|
|
|
Цитата korvin @ Это не утечка памяти, т.к. ссылка на объект все равно доступна из программы Так в этом и заключается утечка Объект не нужен, но ссылка есть - память не удаляем. |
|
Сообщ.
#2588
,
|
|
|
|
Цитата KILLER @ Ты на вопрос ответишь или так и будешь ёрзать туда сюда? Ок, ответ: это зависит от ситуации. Если ссылка еще достижима и объект может быть удален, то нет, это пока еще не утечка. Как только последняя ссылка потеряется и объект не будет удален при этом, а так и останется висеть, то все, утекла память. Это было написано в моем сообщении, которое ты процитировал, я не знаю как тебе еще объяснить. Добавлено Цитата D_KEY @ Так в этом и заключается утечка Объект не нужен, но ссылка есть - память не удаляем.Нет, утечка образуется, когда объект становится в принципе не достижим, например если имеем подсчет ссылок без контроля циклических зависимостей. |
|
Сообщ.
#2589
,
|
|
|
|
Цитата korvin @ это зависит от ситуации. Если ссылка еще достижима и объект может быть удален, то нет, это пока еще не утечка. Как только последняя ссылка потеряется и объект не будет удален при этом, а так и останется висеть, то все, утекла память. Это было написано в моем сообщении, которое ты процитировал, я не знаю как тебе еще объяснить. Я именно это и хотел услышать. Выходит, что если я выделил память по new и банально забыл вызвать delete, то это не утечка памяти, ведь я в любой момент, когда захочу просто вызову в нужном месте оператор delete. Так выходит? |
|
Сообщ.
#2590
,
|
|
|
|
Цитата KILLER @ Я именно это и хотел услышать. Выходит, что если я выделил память по new и банально забыл вызвать delete, то это не утечка памяти, ведь я в любой момент, когда захочу просто вызову в нужном месте оператор delete. Так выходит? ![]() Так ты забыл вызвать delete или вызвал его в нужном месте? И для справки: мы о GC говорим так-то. |
|
Сообщ.
#2591
,
|
|
|
|
Цитата korvin @ Так ты забыл вызвать delete или вызвал его в нужном месте? Забыл вызвать delete. точно также как: Цитата jack128 @ локальный объект подписывается на событие, которое генерит глобальный. А отписаться - забывает. Добавлено Цитата korvin @ И для справки: мы о GC говорим так-то. Ааа, вона как, а я думал что об утечке памяти... |
|
Сообщ.
#2592
,
|
|
|
|
Цитата korvin @ Нет, утечка образуется, когда объект становится в принципе не достижим. Что значит нет, если память не удаляется и ненужные уже объекты продолжают занимать память? |
|
Сообщ.
#2593
,
|
|
|
|
Цитата KILLER @ Забыл вызвать delete. И ссылку потерял? Цитата KILLER @ точно также как: Не точно так же. Цитата KILLER @ Ааа, вона как, а я думал что об утечке памяти... Об утечках памяти при использовании GC. Так понятней? |
|
Сообщ.
#2594
,
|
|
|
|
Цитата D_KEY @ Что значит нет, если память не удаляется и ненужные уже объекты продолжают занимают память? А что тут удивляться, на них же есть ссылки! |
|
Сообщ.
#2595
,
|
|
|
|
Цитата korvin @ И ссылку потерял? Где? Цитата korvin @ Не точно так же. Обоснуй. Цитата korvin @ Об утечках памяти при использовании GC. Так понятней? Так по твоей логике просто выходит что на С++ можно и вовсе не вызывать free/delete. Достаточно вызвать malloc/new и все. А когда программа завершиться, ОС всеравно освободит всю память выделенную программой, а если мы не вызывали очистку памяти, значит она нам нужна якобы, ну и что что мы ей больше не пользуемся... |