powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / Сборщик мусора для Delphi и C/C++
7 сообщений из 7, страница 1 из 1
Сборщик мусора для Delphi и C/C++
    #1202952
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже писал в другой теме про свой сборщик мусора в Delphi – класс TSafeObject и объект ProjectGarbageFinder в Delphi. Они выглядят примерно так:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
TSafeObject=class
  public
    constructor Create;
    destructor Destroy; override;
    procedure SetThisObjectAsDebugging;//Не будет выводиться сообщение об ошибке
  end;

constructor TSafeObject.Create;
  begin
    inherited;
    if poGarbageFinderActive then begin
      ProjecTGarbageFinder.ObjectCreated(self);
    end;
  end;

destructor TSafeObject.Destroy;
  begin
    if poGarbageFinderActive then begin
      ProjecTGarbageFinder.ObjectDestroyed(self);
    end;
  inherited;
end;
Все мои классы теперь наследники TSafeObject.
Мне вначале говорили, что это не нужно, т.к. в Delphi есть опция ReportMemoryLeaksOnShutdown := True;

Но я убедился, что мой сборщик хорошо её дополняет, поскольку у него можно подкрутить много надстроек, облегчающих отлов багов. Лучше всего было бы проанализировать стек на вызове TSafewObject.Create и разобраться, из какого участка кода эта функция была вызвана; но это я пока не осилил. И всё равно мой сборщик хорошо работает, поскольку пишет в отчёте разную вспомогательную информацию (например, время когда был вызван конструктор проблемного объекта).
Вначале я также думал, что можно включить ReportMemoryLeaksOnShutdown на постоянной основе и так и писать код, отлавливая утечки в зародыше. Но это по-моему достаточно неудобно, по крайней мере для меня. Дело в том что часто нужно создавать временный код, который лень писать по правилам, без утечек. Так что я включаю свой сборщик мусора только время от времени, а потом ещё включаю ReportMemoryLeaksOnShutdown – она ловит оставшиеся утечки вроде неудалённых стандартных динамических массивов.

Ещё я почти отказался от обычных динамических массивов в Delphi, заменив их на такие штуки:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TRiAnySimpleArray<MyType> = record
  public
    FCount:integer;
    FItems:tarray<mytype>;
    procedure SetCount(newcount:integer); inline;
    function GetItem(Index:Integer): MyType; inline;
    procedure SetItem(Index:integer; value:mytype); inline;
    property Item[index: integer]: MyType read getItem write setItem; default;
    property Count:integer read FCount write SetCount;
    procedure InitAndSetCount(newcount:integer);
    procedure Initialize;
    procedure Finalize;
  end;
Эти динамические массивы тоже взаимодействуют с моим сборщиком мусора:
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TRiAnySimpleArray<MyType>.SetCount(newcount: integer);
  begin
    if poGarbageFinderActive then begin
      if fcount>0 then ProjecTGarbageFinder.MemoryBlockDestroyed(addr(fitems[0]));
    end;

  setlength(fitems,newcount);
  fcount:=newcount;

  if poGarbageFinderActive then begin
    if newcount>0 then ProjecTGarbageFinder.MemoryBlockCreated(addr(fitems[0]),newcount);
  end;

end;
Так вот у меня вопрос к сишникам – как всё это реализовать на C или C++? Я полагаю, тут всё должно быть очень просто.
...
Изменено: 10.05.2019, 09:51 - Droog
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1203520
Енот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Божечки ж ты мой, это же делфи.
...
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1204100
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Енот  10.05.2019, 14:46
Божечки ж ты мой, это же делфи.
http://lurkmore.to/Pascal
Цитата 
В Интернетах уже стойко закрепилась ситуация, когда постоянно, буквально уже на третьем или четвертом посте в форумах (да и вообще где бы то ни было) какой-нибудь долбоеб нет-нет да и обязательно вставит свои пять копеек про то, что:
Delphi мертв
на Delphi никто ничего не пишет ни в СШA, ни в Европе
на Delphi нет приличных вакансий в РФ, а то, что есть — платят гроши и заставляют допиливать старые задачи, сидя на коробках из-под мониторов перед ЭЛТ-мониторами в госучреждениях
на Delphi никто не открывает новых проектов
Delphi давно продан непонятно кому, и уже не развивается (ну… версии 2006, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8 уже не торты, само собой)
вся команда из Borland ушла в Microsoft
на Delphi можно только программировать мышкой, и ничего сложнее двух кнопок и поля ввода написать нельзя
и тысячи, тысячи подобной ерунды.
И у меня всё-таки вопрос изначально был к сишникам - подскажите как аналогичный объект там должен выглядеть?
...
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1222235
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
в делфи сборщик мусора как бы есть и он даже нормально работает, если использовать РЕКОМЕНДАЦИИ РАЗРАБОТЧИКА при создании собственных объектов.
...
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1227395
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose  17.05.2019, 07:04
в делфи сборщик мусора как бы есть и он даже нормально работает, если использовать РЕКОМЕНДАЦИИ РАЗРАБОТЧИКА при создании собственных объектов.
Это ReportMemoryLeaksOnShutdown? Ну я же про него вначале написал.
...
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1227398
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не умеешь ? Забей !
Будь как Пошэ - склипиздень двужопостворчатый !
eNose  17.05.2019, 07:04
в делфи сборщик мусора как бы есть и он даже нормально работает, если использовать РЕКОМЕНДАЦИИ РАЗРАБОТЧИКА при создании собственных объектов.
нету там сборщика мусора
он только для ARC
...
Гарыныч сказал - Гарыныч спиздел
#деда#ослег#подослали

на чём бы я не осуществлял бы или осуществлял бы, объяснял бы или не объяснял бы, СОСТОЯНИЕ СИТУАЦИИ ВСЁ РАВНО ОТ ЭТОГО НЕ ИЗМЕНИЛОСЬ БЫ (с) Кикки
Рейтинг: 0 / 0
Сборщик мусора для Delphi и C/C++
    #1230615
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Droog  10.05.2019, 19:20
Енот  10.05.2019, 14:46
Божечки ж ты мой, это же делфи.
http://lurkmore.to/Pascal
Цитата 
В Интернетах уже стойко закрепилась ситуация, когда постоянно, буквально уже на третьем или четвертом посте в форумах (да и вообще где бы то ни было) какой-нибудь долбоеб нет-нет да и обязательно вставит свои пять копеек про то, что:
Delphi мертв
на Delphi никто ничего не пишет ни в СШA, ни в Европе
на Delphi нет приличных вакансий в РФ, а то, что есть — платят гроши и заставляют допиливать старые задачи, сидя на коробках из-под мониторов перед ЭЛТ-мониторами в госучреждениях
на Delphi никто не открывает новых проектов
Delphi давно продан непонятно кому, и уже не развивается (ну… версии 2006, 2007, 2009, 2010, XE, XE2, XE3, XE4, XE5, XE6, XE7, XE8 уже не торты, само собой)
вся команда из Borland ушла в Microsoft
на Delphi можно только программировать мышкой, и ничего сложнее двух кнопок и поля ввода написать нельзя
и тысячи, тысячи подобной ерунды.
И у меня всё-таки вопрос изначально был к сишникам - подскажите как аналогичный объект там должен выглядеть?
Никак. Сборка мусора на плюсах - половое извращение.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Вопросы по IT / Сборщик мусора для Delphi и C/C++
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]