Есть ли будущее у DELPHI?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела:
| Страницы: (245) « Первая ... 174 175 [176] 177 178 ... 244 245 ( Перейти к последнему сообщению ) |
Есть ли будущее у DELPHI?
|
Сообщ.
#2626
,
|
|
|
|
ОС освободит память когда завершиться программа, а если эта программа висит 24/7/365, то очень скоро она упадет по out of memory. Что и требовалось доказать, под утечкой памяти можно понимать нерациональное использование памяти. Пусть у тебя хоть будут ссылки на неосвобожденую память хоть нет, факт состоит в том, что ты не очистил не нужную память, тем самым уменьшил ее кол-во для приложения и ОС в целом. Добавлено Цитата --Ins-- @ не надо рассматривать это определение буквально, иначе с этой точки зрения в Delphi тоже утечек быть не может Так я им это и пытаюсь втереть, а они все как мантру вторят : "Мы говорим о языках с GC"... |
|
Сообщ.
#2627
,
|
|
|
|
То, что это "a programming or design error, but is not a memory leak". Если я в плюсах буду держать список объектов, это тоже утечка? Может тогда вообще любое динамическое выделение памяти -- это утечка? Давайте юзать только стек. Добавлено Цитата KILLER @ ОС освободит память когда завершиться программа, а если эта программа висит 24/7/365, то очень скоро она упадет по out of memory. В том примере ты выделяешь память один раз, с чего бы ей падать от Out Of Memory? |
|
Сообщ.
#2628
,
|
|
|
|
да, чую программисты будущего будут делать круглые глаза - спрашивая, что такое delete. а на просьбу написать ручками, скажем, двунаправленный список, юзаемый по принципу скользящего окна, реагировать конвульсиями
|
|
Сообщ.
#2629
,
|
|
|
|
Цитата --Ins-- @ Нет, не надо рассматривать это определение буквально, иначе с этой точки зрения в Delphi тоже утечек быть не может, т.к. чисто теоретически все ссылки на выделенную память храняться в структурах менеджера памяти и тоже теоретически достижимы. Но фактически то, что описал Jack - утечка, ибо этот ресурс фактически уже никто не освободит Теоретически? Что это значит? Для программы достижимы? ![]() ![]() procedure Make; var P : ^Integer; begin New(P); end; begin Make; // как мне здесь удалить память, выделенную для P? end. |
|
Сообщ.
#2630
,
|
|
|
|
Во шо я надыбал
Java memory leaks |
|
Сообщ.
#2631
,
|
|
|
|
Цитата korvin @ То, что это "a programming or design error, but is not a memory leak". А с чего ты решил, что это фраза верна? Называй как хочешь, но память-то течет Цитата Если я в плюсах буду держать список объектов, это тоже утечка? Ты почему-то подходишь с формальной точки зрения, хотя у нас тут вполне реальная ситуация. Формально(для сборщика) утечки нет, поскольку ссылка есть и объект доступен. Но реально-то программа течет. Добавлено Цитата _lcf_ @ да, чую программисты будущего будут делать круглые глаза - спрашивая, что такое delete. а на просьбу написать ручками, скажем, двунаправленный список, юзаемый по принципу скользящего окна, реагировать конвульсиями ![]() Так уже |
|
Сообщ.
#2632
,
|
|
|
|
Цитата korvin @ В том примере ты выделяешь память один раз, с чего бы ей падать от Out Of Memory? Ну так у меня там и нет кода, который бы запустил программу на такое время как в указаном примере, но тебя ведь это не смутило? |
|
Сообщ.
#2633
,
|
|
|
|
Цитата korvin @ Теоретически? Что это значит? Для программы достижимы? Прикинь, да Менеджер памяти знает о памяти все, в том числе где и что он выделили и что освободил или нет - так и работают инструменты следящие за учетками. Работая с менеджером памяти напрямую, все ссылки на выделенную им память можно получить. Но сути это не меняет, никто таким образом память освобождать не будет и с каждым таким ляпом память будет утекать, пока однажды не закончится. Как в в случае, приведенным Джеком. Добавлено Утечкой памяти нужно считать не теоретически недостижимую ссылку, а фактически недостижимую для удаления ссылку |
|
Сообщ.
#2634
,
|
|
|
|
Цитата D_KEY @ А с чего ты решил, что это фраза верна? Называй как хочешь, но память-то течет Ты почему-то подходишь с формальной точки зрения, хотя у нас тут вполне реальная ситуация. Формально(для сборщика) утечки нет, поскольку ссылка есть и объект доступен. Но реально-то программа течет. Т.е. неограниченно растущий кэш -- это тоже утечка памяти? Ок... |
|
Сообщ.
#2635
,
|
|
|
|
Цитата korvin @ Т.е. неограниченно растущий кэш -- это тоже утечка памяти? Ок... А что, "нужно" и "забыл" - это слова синонимы? Добавлено korvin, почему ты баг пытаешься представить фичей? Добавлено Одно дело, когда тебе для работы программы нужно 15 гигабайт оперативы, и ты хоть усрись, при меньшем объеме бьудут жуткие тормоза и невозможно будет работать. Тут если у тебя всего в наличии 3 гига, то тебе нужно докупать оборудование, в нашем примере - еще 12 гигов рамы. А другое дело, когда у тебя приложение жрет 15 гигабайт памяти, просто так, потому что программист забыл отписаться от события. И тут уже нужно не железо покупать, а прогу фиксить. Добавлено А чо и правда, то что на вики приведено: ![]() ![]() #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 */ } Является своего рода неограниченно растущим кэшем |
|
Сообщ.
#2636
,
|
|
|
|
Цитата KILLER @ korvin, почему ты баг пытаешься представить фичей? Не пытаюсь, ты упустил что-то. Я пытаюсь объяснить, что у этого бага несколько иная природа, и дабы отделять его от других багов не стоит называть его так же. |
|
Сообщ.
#2637
,
|
|
|
|
Цитата korvin @ Не пытаюсь, ты упустил что-то. Я пытаюсь объяснить, что у этого бага несколько иная природа, и дабы отделять его от других багов не стоит называть его так же. Ок. Отвечу на твой предыдущий вопрос твоей же логикой: Цитата korvin @ procedure Make; var P : ^Integer; begin New(P); end; begin Make; // как мне здесь удалить память, выделенную для P? end. Очень просто, всеголишь вместо процедуры юзнуть функцию, которая будет возвращать твой указатель и удалить его после вызова make. Какие проблемы? Это аналогичные баги, только в одном случае программист забыл написать delete, в другом случае - забыл отписаться от события. То что там было приведено с тем же for: ![]() ![]() for(int i = 0; i < 100; ++i) { int* p = new int[100]; } Тут тоже нет утечки, так как по твоей же логике, откуда ты знаешь зачем я это написал? А может это я специально сделал, чтоб потом дописать: ![]() ![]() for(int i = 0; i < 100; ++i) { int* p = new int[100]; SomeFunc(p); delete [] p; } Так сказать неограниченно растущий кэш - не является мем. ликом. Добавлено Цитата korvin @ дабы отделять его от других багов не стоит называть его так же. А как это называется? Самая что нинаесть утечка памяти. Потому что GC ее не очистит, ибо ссылка валидная, и ты ссылку не прибьешь, ибо забыл про нее. А еще ты пропустил один интересный вопрос к тебе: Цитата MyNameIsIgor @ Например, в случае C# - там, ЕМНИП, отписка от события происходит по объекту. Поэтому, если ты потерял ссылку на объект, то и отписаться не сможешь - ты не имеешь доступа к объекту, так почему это не утечка? |
|
Сообщ.
#2638
,
|
|
|
|
Цитата KILLER @ А как это называется? Самая что нинаесть утечка памяти. Потому что GC ее не очистит, ибо ссылка валидная, и ты ссылку не прибьешь, ибо забыл про нее. А еще ты пропустил один интересный вопрос к тебе: Цитата (MyNameIsIgor @ Сегодня, 14:38) Например, в случае C# - там, ЕМНИП, отписка от события происходит по объекту. Поэтому, если ты потерял ссылку на объект, то и отписаться не сможешь - ты не имеешь доступа к объекту, так почему это не утечка? Строго говоря, объект доступен через Delegate.Target |
|
Сообщ.
#2639
,
|
|
|
|
Цитата KILLER @ Отвечу на твой предыдущий вопрос твоей же логикой: Цитата korvin @ procedure Make; var P : ^Integer; begin New(P); end; begin Make; // как мне здесь удалить память, выделенную для P? end. Очень просто, всеголишь вместо процедуры юзнуть функцию Это не ответ, ты изменил условие. Цитата KILLER @ А еще ты пропустил один интересный вопрос к тебе: Вообще-то я на него ответил, смотри внимательней тред. |
|
Сообщ.
#2640
,
|
|
|
|
Цитата korvin @ Это не ответ, ты изменил условие. А ты не менял условие? Изначальное условие состояло в том, что никому не нужная память висит просто так, и никто ее не очистит. Ты начал придумывать будто она уже нужна... Ну и я тоже начал придумывать. Добавлено Просто когда память закончится, что моя программа, что твоя - обе упадут по out of memory. И виной будет именно нерациональное использование памяти что в твоем, что в моем случае, утечка памяти попросту говоря. Так как ты не знаешь какую память тебе нужно освободить. И мне почему то кажется, что в твоем случае просто так, как ты говоришь не сделаешь, нужно еще найти эту ненужную ссылку. |