Erros, bugs, perguntas - página 2468

 
Alexey Navoykov:

O pseudo código que eles deram neste fio há algum tempo, procure-o. Tanto quanto me lembro, a capacidade ali só é aumentada quando o tamanho da matriz excede esta capacidade. Embora algo pudesse ter mudado, é claro.

E a função para obter o valor da saracidade é realmente muito necessária.

Obrigado pela informação, até agora descobri como o fxsaber estava à procura da mesma coisa ))).

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

fxsaber, 2018.04.13 10:04

Ajude a encontrar o posto do programador onde o código fonte ArrayResize foi colocado. Googling "site:mql5.com/pt/forum ArrayResize+reserve" não ajuda.

Lembro-me de que havia um código fonte. Nele se pode ver imediatamente a lógica de implementação do parâmetro de reserva.

Pesquisei no google, pesquisei no fórum, pesquisei nos perfis dos principais desenvolvedores...
Além da possibilidade de usar o tamanho_reserva com valor -1 em ArrayResize para limpar a memória previamente alocada, não encontrei nada.
 
Sergey Dzyublik:

Obrigado pela informação, até agora descobri como o fxsaber procurava a mesma coisa))

Também ainda não o encontrei).

Penso que @Slava escreveu sobre o assunto.

 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

Ilyas, 2016.08.24 11:08

O conjunto ("dentro") armazena o conjunto atribuído - sob quantos elementos o conjunto é atribuído.

A lógica para trabalhar com atribuído (código condicional):
ArrayResize(arr,int size,int reserve)
  {
   if(arr.allocated<size)
      if(!ArrayAllocateMemory(arr,size+reserve))  // -> arr.allocated=size+reserve;
         return(-1);
   //---
   CallConstructorsOrDestructors(arr,size);
   //---
   arr.size=size;
   return(size);
  }

 
Alexey Navoykov:

Obrigado pela vossa ajuda.
Infelizmente, este código não fornece quaisquer respostas às perguntas em questão.

 
class A{
   uchar data;
};
 
template<typename T>
class B{
public:
   T data;
};

template<typename T>
class C {
public:
   uchar data;
};


void OnStart(){
   A a;
   B<A> b;
   C<A> c;
   
   a = (A)(a);
   b = (B<A>)(b);    //'(' - invalid cast operation
   c = (C<A>)(c);    //code generation error            
}
Nem todos os tipos de dados podem realizar um molde de tipo "em si", acontece...
As classes modelo partem em tempo de compilação, mas as estruturas são OK.
 
Pode puxar a reserva com ganchos sujos e verificar o comportamento de redimensionamento com as pegas
 
TheXpert:
Pode obter a reserva com ganchos sujos e verificar o comportamento de redimensionamento com pegas

Presumivelmente, na memória do objecto da matriz, a variável sob tamanho reservado encontra-se ao lado da variável sob tamanho.
Mas neste momento há dez tarefas mais urgentes do que a depuração ou escavação em memória do MT para estudar o efeito do ArrayResize no campo de tamanho reservado do objecto da matriz.

 
Sergey Dzyublik:
#import "msvcrt.dll"
  long memcpy(int &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long offset;
   double x[];
   
   int capacity() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[8];
   }
};

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 17, 8755);
   Print("all reserved size = ", store.capacity()); // 8772
}
 
Sergey Dzyublik:
Nem todos os tipos de dados podem realizar um molde de tipo "em si", acontece...
As classes modelo partem em tempo de compilação, mas as estruturas são OK.

Obrigado pela mensagem.

É um rudimento, nós arranjamo-lo.

 
TheXpert:

Obrigado, não pensei no acesso do WinApi à memória de processo.

P.s. A mensagem pessoal está fechada, por isso estou a escrever aqui:
"Na engenharia inversa, o termo gancho tem um significado específico - código para interceptar a invocação de uma função ou evento".