Вопросы по ООП в MQL5 - страница 10

 
Vasiliy Sokolov:

...Какой вариант используется в MQL неизвестно...

В МКЛ нет сборщика мусора.
 
Vasiliy Sokolov:

Добрый день. Память компьютера имеет одинаковую производительность не зависимо от того, используется ли она в контексте стека или кучи. Сам менеджмент динамической памяти зависит от реализации сборщика мусора: например это может быть подсчет ссылок как в Питоне (более медленный вариант) или анализ эпох поколений объектов с обходом графа исполнения в background процессе (Net CLR). Какой вариант используется в MQL неизвестно, однако можно предположить его крайнюю эффективность, т.к. пользователю MQL5 доступен оператор delete напрямую, что значительно упрощает работу самого GC. В связи с этим Ваши опасения по поводу overhead'a при использовании new напрасны - смело используйте динамическую память.

Что касается "переполнения стека" то встретится с этим кейсом в современных системах можно разве что при использовании сложной рекурсии или при ошибке в рекурсивном алгоритме. Современная программа всегда работает в защищенном режиме OC в виртуальном адресном пространстве, с динамической подгрузкой страниц памяти, поэтому не переживайте: стек не закончится:)

Ложное утверждение.

 
Dmitry Fedoseev:
В МКЛ нет сборщика мусора.

откуда информация? а на чем написан МТ4 / МТ5 ? - есть информация?

;)

ЗЫ: максимум что в свободном доступе - вакансии от Метаквот, там написаны требования к программистам соискателям ;)

 
Igor Makanu:

откуда информация? а на чем написан МТ4 / МТ5 ? - есть информация?

;)

ЗЫ: максимум что в свободном доступе - вакансии от Метаквот, там написаны требования к программистам соискателям ;)

Какая разница на чем он написан? В mql, объекты созданные через new сами не удаляются. Кстати, в с++ тоже))

 
Dmitry Fedoseev:
В МКЛ нет сборщика мусора. 

Дмитрий, ты не прав. Вот три довода почему в MetaTrader все-таки есть сборщик мусора:

  1. MQL5 вполне себе удаляет объекты созданный без new, автоматически. Указатели на такие объекты имеют тип AUTOMATIC. Удалить их в автоматическом режиме может либо Святой Дух, либо сборщик мусора.
  2. Не раз, разработчики упоминали о том, что MQL5  программу исполняет внутренняя виртуальная машина MetaTrader. Раз есть виртуальная машина, то должен быть и сборщик мусора.
  3. Если динамический объект не удален как нужно пользователем, MetaTrader укажет на это сообщением 'leaked memmory' с указанием того, сколько и каких объектов не удалено. Т.е. MetaTrader прекрасно знает на самом деле, сколько и чего было выделено - т.е. очевидно, что паралельно работает некая система которая контролирует работу с памятью, это сборщик мусора и есть. 
 
Dmitry Fedoseev:

Ложное утверждение.

З.Ы. А вообще ты сильно изменился за эти годы. Озлобленным каким-то стал. Раньше помню много конструктива предлагал. Сейчас же постоянно в какие-то свары скатываешься: одни бессмысленные споры/опровержения/разоблачения. Для чего все это? Хочешь потяжелее ударить? - сам поднесу тебе камень: бей как хочешь, но жалко мне тебя все равно.

 
Vasiliy Sokolov:

Дмитрий, ты не прав. Вот три довода почему в MetaTrader все-таки есть сборщик мусора:

  1. MQL5 вполне себе удаляет объекты созданный без new, автоматически. Указатели на такие объекты имеют тип AUTOMATIC. Удалить их в автоматическом режиме может либо Святой Дух, либо сборщик мусора.
  2. Не раз, разработчики упоминали о том, что MQL5  программу исполняет внутренняя виртуальная машина MetaTrader. Раз есть виртуальная машина, то должен быть и сборщик мусора.
  3. Если динамический объект не удален как нужно пользователем, MetaTrader укажет на это сообщением 'leaked memmory' с указанием того, сколько и каких объектов не удалено. Т.е. MetaTrader прекрасно знает на самом деле, сколько и чего было выделено - т.е. очевидно, что паралельно работает некая система которая контролирует работу с памятью, это сборщик мусора и есть. 

1. И не святой дух и не сборщик мусора. 

2.3. Фантазировать можно бесконечно. 

 
Vasiliy Sokolov:

З.Ы. А вообще ты сильно изменился за эти годы. Озлобленным каким-то стал. Раньше помню много конструктива предлагал. Сейчас же постоянно в какие-то свары скатываешься: одни бессмысленные споры/опровержения/разоблачения. Для чего все это? Хочешь потяжелее ударить? - сам поднесу тебе камень: бей как хочешь, но жалко мне тебя все равно.

Рыдаю!

 
Dmitry Fedoseev:

1. И не святой дух и не сборщик мусора. 

2.3. Фантазировать можно бесконечно. 

Читаем доки. Оператор new возвращает не указатель на объект, а дескриптор объекта. Осмелюсь предположить, что любой класс оборачивается в некую обертку, котрая благополучно убивает забытый объект при сворачивании программы, заодно любезно указывает на наличие утечек. А вообще этот механизм лучше бы создателям прокомментировать.
 
Vladimir Simakov:
Читаем доки. Оператор new возвращает не указатель на объект, а дескриптор объекта. Осмелюсь предположить, что любой класс оборачивается в некую обертку, котрая благополучно убивает забытый объект при сворачивании программы, заодно любезно указывает на наличие утечек. А вообще этот механизм лучше бы создателям прокомментировать.

Ага, удаляет и пишет сообщение об утечке памяти, только что бы программистам, пишущим советников, было не скучно жить.

Интересно, как получается, вчера была утечка памяти, а сегодня ее уже и в принципе быть не может.

И кстати о птичках.. дескрипторы это тоже указатели. И знаете ли, от самого слова, ничего не меняется, дескриптор ли, указатель, идентификатор.