Есть ли будущее у DELPHI?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела:
| Страницы: (245) « Первая ... 172 173 [174] 175 176 ... 244 245 ( Перейти к последнему сообщению ) |
Есть ли будущее у DELPHI?
|
Сообщ.
#2596
,
|
|
|
|
Цитата D_KEY @ Что значит нет, если память не удаляется и ненужные уже объекты продолжают занимать память? Откуда ты знаешь, что они не нужные? Может нужные, может я специально закинул туда пару объектов, чтобы их нельзя было (легко) удалить? Это может быть вполне нормальной ситуацией, или мне теперь что, держать еще один список, в котором только нужные объекты, чтоб можно было сравнить с основным? А кто будет следить за этим контрольным списком? Сравни это с ситуацией, когда у тебя просто висят два зацикленных друг на друга объекта и больше на них ссылок нет. Хорошо еще, если они как-то проявляют себя, а если молча висят? Добавлено Откуда я знаю, где ты ее потерял. Так потерял или нет? Цитата KILLER @ Так по твоей логике просто выходит что на С++ можно и вовсе не вызывать free/delete. Достаточно вызвать malloc/new и все. А когда программа завершиться, ОС всеравно освободит всю память выделенную программой, а если мы не вызывали очистку памяти, значит она нам нужна якобы, ну и что что мы ей больше не пользуемся... Нет, это по твоей логике выходит, будто ты не видишь разницы между наличием возможности удалить объект и ее отсутствием. Добавлено Цитата Other memory consumers Note that constantly increasing memory usage is not necessarily evidence of a memory leak. Some applications will store ever increasing amounts of information in memory (e.g. as a cache). If the cache can grow so large as to cause problems, this may be a programming or design error, but is not a memory leak as the information remains nominally in use. http://en.wikipedia.org/wiki/Memory_leak#O...emory_consumers Собственно пример Джека такой ситуацией является, особенно учитывая, что объект получает сообщение о событии и выполняет какие-то действия. |
|
Сообщ.
#2597
,
|
|
|
|
Цитата korvin @ Нет, это по твоей логике выходит, будто ты не видишь разницы между наличием возможности удалить объект и ее отсутствием. Это как раз таки по твоей логике выходит что если программист забыл очситить память, то можно спихнуть на то, что: Цитата korvin @ Откуда ты знаешь, что они не нужные? Может нужные, может я специально закинул туда пару объектов, чтобы их нельзя было (легко) удалить? Это может быть вполне нормальной ситуацией, или мне теперь что, держать еще один список, в котором только нужные объекты, чтоб можно было сравнить с основным? А кто будет следить за этим контрольным списком? Другими словами, откуда ты знаешь что это мемори лик? Может мне эта память еще пригодится, и я заведомо память не освободил? |
|
Сообщ.
#2598
,
|
|
|
|
Цитата KILLER @ Это как раз таки по твоей логике выходит что если программист забыл очситить память, то можно спихнуть на то, что: ... Другими словами, откуда ты знаешь что это мемори лик? Может мне эта память еще пригодится, и я заведомо память не освободил? смотри выше, я в предыдущем посте добавил цитату с вики. |
|
Сообщ.
#2599
,
|
|
|
|
Цитата korvin @ Откуда я знаю, где ты ее потерял. Так потерял или нет? Ну вот код что по твоей вики там был, что то типа: ![]() ![]() for(int i = 0; i < 100; ++i) { int* p = new int[100]; } Откуда ты знаешь что выделеная память мне не нужна? Вдруг я потом подумаю и юзну ее как нибудь, а пока пускай будет. ссылки все валидные, я ведь знаю где я ее выделяю, нужна будет ссылка, ну так сделаю ее, какие проблемы? Добавлено Цитата korvin @ Собственно пример Джека такой ситуацией является, особенно учитывая, что объект получает сообщение о событии и выполняет какие-то действия. В примере Джека забыли прибить ссылку, когда она больше не нужна. А в приводимом тебе примере, забыли прибить память, когда она больше не нужна. Добавлено korvin, когда память кончица, как ее GC очистит ? Ссылки то валидные, но ненужны давным давно уже... |
|
Сообщ.
#2600
,
|
|
|
|
Цитата KILLER @ Ну вот код что по твоей вики там был, что то типа: ![]() ![]() for(int i = 0; i < 100; ++i) { int* p = new int[100]; } Откуда ты знаешь что выделеная память мне не нужна? Вдруг я потом подумаю и юзну ее как нибудь, а пока пускай будет. ссылки все валидные, я ведь знаю где я ее выделяю, нужна будет ссылка, ну так сделаю ее, какие проблемы? Ты теряешь ссылки в цикле, у тебя остается указатель только на последний созданный массив, остальные 99 потерялись. Потерял ссылку -- получил утечку. |
|
Сообщ.
#2601
,
|
|
|
|
Цитата KILLER @ В примере Джека забыли прибить ссылку, когда она больше не нужна. А в приводимом тебе примере, забыли прибить память, когда она больше не нужна. Еще раз перечитай цитату с вики. |
|
Сообщ.
#2602
,
|
|
|
|
Offtop
Скрытый текст ![]() ![]() <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>korvin @ <time class="tag-quote__quoted-time" datetime="2012-11-19T11:06:06+00:00">19.11.12, 11:06</time></span><div class='quote '>Ты теряешь ссылки в цикле, у тебя остается указатель только на последний созданный массив,</div></div> а разве в С++ p будет доступна извне цикла??? |
|
Сообщ.
#2603
,
|
|
|
|
Именно, утечкой памяти называются не все возможные ошибки, приводящие к возрастанию потребления памяти, в вполне конкретный их вид. |
|
Сообщ.
#2604
,
|
|
|
|
Дурилка, это по сути одно и тоже, память под объектом останется неочищеной, суть мемори лик, иди на вики хоть сходи просветись, корвин несколько ссылок вон накидал. Цитата korvin @ Еще раз перечитай цитату с вики. Перечитываю: Цитата 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.[1] In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.[2] A memory leak has symptoms similar to a number of other problems (see below) and generally can only be diagnosed by a programmer with access to the program source code. Как раз обсуждаемый случай. |
|
Сообщ.
#2605
,
|
|
|
|
Цитата jack128 @ а разве в С++ p будет доступна извне цикла? А, точно, значит все 100 в трубу. =) |
|
Сообщ.
#2606
,
|
|
|
|
Цитата korvin @ Ты теряешь ссылки в цикле, у тебя остается указатель только на последний созданный массив, остальные 99 потерялись. Потерял ссылку -- получил утечку. Так мне эта память нужна только внутри цикла, я забыл внутри цикла вызвать delete, считай тело цикла - рабочая область моей переменной p. |
|
Сообщ.
#2607
,
|
|
|
|
Цитата 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.[1] In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.[2] A memory leak has symptoms similar to a number of other problems (see below) and generally can only be diagnosed by a programmer with access to the program source code. Так лучше видно ? ;-) |
|
Сообщ.
#2608
,
|
|
|
|
Цитата 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.[1] In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.[2] A memory leak has symptoms similar to a number of other problems (see below) and generally can only be diagnosed by a programmer with access to the program source code. Во-первых не ту читаешь, а во-вторых даже тут я тебе выделил курсивом, в случае Джека объект все еще доступен -- из списка. |
|
Сообщ.
#2609
,
|
|
|
|
Ладно, зайдем с другой стороны, вот это мем лик или нет?
![]() ![]() int main() { int* p = new int[10000]; //! Work with p ... ... return 0; } А если я ее глобальной сделаю, это будет мемори лик? |
|
Сообщ.
#2610
,
|
|
|
|
Цитата korvin @ Откуда ты знаешь, что они не нужные? Из того, что они не используются. Просто ссылка висит в каком-нибудь контейнере без надобности с т.з. логики. Прочит уже про weak reference. Цитата Может нужные, может я специально закинул туда пару объектов, чтобы их нельзя было (легко) удалить? Если специально, значит утечки и нет В чем твой вопрос? Ведь проблема утечек в случае GC как раз и связана с тем, что GC не в состоянии проникнуть в мозг и понять, что хотел программист. Цитата Сравни это с ситуацией, когда у тебя просто висят два зацикленных друг на друга объекта и больше на них ссылок нет. Ситуация очень похожа и даже решается аналогично - слабыми ссылками. Добавлено Цитата jack128 @ Так лучше видно ? ;-) Видно, что и на вики иногда пишут чушь |