Perguntas sobre OOP em MQL5 - página 10

 
Vasiliy Sokolov:

...Qual variante é usada na MQL é desconhecida...

Não há coletor de lixo na MQL.
 
Vasiliy Sokolov:

Boa tarde. A memória do computador tem o mesmo desempenho, independentemente de ser usada em um contexto de pilha ou pilha. A própria gestão dinâmica da memória depende da implementação de coletores de lixo: por exemplo, pode ser contagem de referência como em Python (variante mais lenta) ou análise de épocas de geração de objetos com a travessia gráfica de execução em processo de fundo (Net CLR). Qual variante é usada na MQL é desconhecida, mas podemos assumir que é extremamente eficiente, pois o usuário da MQL5 tem acesso direto ao operador de eliminação, o que simplifica muito o trabalho da própria GC. Portanto, suas preocupações com a sobrecarga ao usar novas são infundadas - sinta-se à vontade para usar memória dinâmica.

Quanto ao "estouro de pilha", a única maneira de encontrar este caso em sistemas modernos é quando se usa recursividade complexa ou se comete um erro no algoritmo recursivo. Um programa moderno sempre funciona em modo protegido OC no espaço de endereços virtual, com carregamento dinâmico de páginas de memória, portanto não se preocupe: a pilha não irá transbordar:)

Falsa declaração.

 
Dmitry Fedoseev:
Não há coletor de lixo na MKL.

de onde vem a informação? em que está escrito o MT4 / MT5? - alguma informação?

;)

ZS: o máximo que está livremente disponível - vagas de emprego da Metakvot, há requisitos escritos para programadores a candidatos;)

 
Igor Makanu:

de onde vem a informação? em que está escrito o MT4 / MT5? - alguma informação?

;)

ZS: o máximo que está livremente disponível - vagas de emprego da Metakvot, há requisitos escritos para programadores a candidatos;)

Que diferença faz aquilo em que está escrito? Em mql, os objetos criados com novo não são apagados por eles mesmos. A propósito, nem em c++))

 
Dmitry Fedoseev:
Não há coletor de lixo na MKL.

Dimitri, você está errado. Aqui estão três razões pelas quais o MetaTrader tem um coletor de lixo afinal de contas:

  1. A MQL5 elimina automaticamente os objetos criados sem novos. Os ponteiros para tais objetos têm tipo AUTOMÁTICO. Eles podem ser apagados automaticamente ou pelo Espírito Santo, ou pelo coletor de lixo.
  2. Mais de uma vez, os desenvolvedores mencionaram que o programa MQL5 é executado pela máquina virtual interna MetaTrader. Se houver uma máquina virtual, então deve haver também o coletor de lixo.
  3. Se um objeto dinâmico não tiver sido excluído como exigido pelo usuário, o MetaTrader o indicará com a mensagem "leaked memmory" indicando quantos e quais objetos não foram excluídos. Ou seja, MetaTrader sabe de fato quanto e o que foi alocado - ou seja, é óbvio que há algum sistema rodando em paralelo que controla a operação de memória, este é o coletor de lixo.
 
Dmitry Fedoseev:

Falsa declaração.

P.S. Você mudou muito ao longo dos anos, no entanto. Você se tornou um pouco rancoroso. Lembro-me que você costumava oferecer muitas sugestões construtivas. Agora você está constantemente brigando: argumentos sem sentido / negações / denúncias. Para que serve tudo isso? Você quer me bater com mais força? - Eu mesmo lhe darei uma pedra: me bata como quiser, mas sinto pena de todos vocês da mesma forma.

 
Vasiliy Sokolov:

Dimitri, você está errado. Aqui estão três razões pelas quais o MetaTrader tem um coletor de lixo afinal de contas:

  1. A MQL5 elimina automaticamente os objetos criados sem novos. Os ponteiros para tais objetos têm tipo AUTOMÁTICO. Eles podem ser apagados automaticamente ou pelo Espírito Santo, ou pelo coletor de lixo.
  2. Mais de uma vez, os desenvolvedores mencionaram que o programa MQL5 é executado pela máquina virtual interna MetaTrader. Se houver uma máquina virtual, então deve haver também o coletor de lixo.
  3. Se um objeto dinâmico não tiver sido excluído como exigido pelo usuário, o MetaTrader o indicará com a mensagem "leaked memmory" indicando quantos e quais objetos não foram excluídos. Então MetaTrader sabe exatamente quanto e o que foi alocado - é óbvio que há algum sistema rodando em paralelo que controla o manuseio da memória, este é um coletor de lixo.

1. não o espírito santo e não o coletor de lixo.

2.3 Você pode fantasiar sem fim.

 
Vasiliy Sokolov:

Z.I. Você mudou muito ao longo dos anos. Você se tornou um pouco amargo. Lembro-me que você costumava oferecer muitas sugestões construtivas. Agora você está constantemente brigando: apenas argumentos sem sentido / negações / denúncias. Para que serve tudo isso? Você quer me bater com mais força? - Eu mesmo lhe darei uma pedra: me bata como quiser, mas sinto pena de você de qualquer maneira.

Sóbrio!

 
Dmitry Fedoseev:

1. nem um espírito santo nem um coletor de lixo.

2.3 A imaginação é infinita.

Vamos ler os documentos. O novo operador não devolve um ponteiro a um objeto, mas um descritor de objeto. Atrevo-me a sugerir que qualquer classe está envolta em algum invólucro que mata com segurança o objeto esquecido ao minimizar o programa e ao mesmo tempo indica gentilmente a presença de vazamentos. Em geral, este mecanismo seria melhor deixar para os criadores comentarem.
 
Vladimir Simakov:
Vamos ler os documentos. O novo operador não devolve um ponteiro a um objeto, mas um descritor de objeto. Ouso sugerir que qualquer classe seja envolvida em algum invólucro que mata com segurança o objeto esquecido na minimização, ao mesmo tempo em que gentilmente aponta para vazamentos existentes. Em geral, este mecanismo seria melhor deixar para os criadores comentarem.

Sim, ele apaga e escreve uma mensagem sobre vazamentos de memória, apenas para que os programadores que escrevem EAs não se aborreçam com suas vidas.

É interessante como ontem houve um vazamento de memória e hoje não pode haver nem mesmo um.

E por falar em aves... os descritores também são indicadores. E você sabe que a palavra em si não muda nada, seja ela um descritor, um ponteiro, um identificador.