Errores, fallos, preguntas - página 2468

 
Alexey Navoykov:

El pseudocódigo que dieron en este hilo hace tiempo, búscalo. Que yo recuerde, ahí se aumenta la capacidad sólo cuando el tamaño del array supera esa capacidad. Aunque algo podría haber cambiado, claro.

Y la función para obtener el valor de la saracidad es realmente muy necesaria.

Gracias por la información, de momento he encontrado como fxsaber buscaba lo mismo )).

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bichos, errores, preguntas

fxsaber, 2018.04.13 10:04

Ayuda a encontrar el post del desarrollador donde se publicó el código fuente de ArrayResize. Buscar en Google "site:mql5.com/es/forum ArrayResize+reserve" no ayuda.

Recuerdo que había un código fuente. En él se puede ver inmediatamente la lógica de implementación del parámetro de reserva.

He buscado en google, he buscado en el foro, he buscado en los perfiles de los principales desarrolladores...
Además de la posibilidad de usar reserve_size con valor -1 en ArrayResize para borrar la memoria previamente asignada, no he encontrado nada.
 
Sergey Dzyublik:

Gracias por la información, de momento he encontrado como fxsaber buscaba lo mismo ))

Yo tampoco lo he encontrado).

Creo que @Slava escribió sobre ello.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Ilyas, 2016.08.24 11:08

El array ("inside") almacena el asignado - bajo cuántos elementos está asignado el array.

La lógica para trabajar con asignados (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:

Gracias por su ayuda.
Desgraciadamente, este código no proporciona ninguna respuesta a las preguntas que se plantean.

 
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            
}
Resulta que no todos los tipos de datos pueden realizar un reparto de tipos "en sí mismo"...
Las clases de plantillas se rompen en tiempo de compilación, pero las estructuras están bien.
 
Puedes sacar la reserva con ganchos sucios y comprobar el comportamiento del redimensionamiento con las asas
 
TheXpert:
Puedes obtener la reserva con ganchos sucios y comprobar el comportamiento del redimensionamiento con asas

Presumiblemente, en la memoria del objeto array, la variable bajo tamaño reservado se encuentra junto a la variable bajo tamaño.
Pero en este momento hay diez tareas más urgentes que depurar o escarbar en la memoria de MT para estudiar el efecto de ArrayResize en el campo de tamaño reservado del objeto array.

 
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:
Resulta que no todos los tipos de datos pueden realizar un reparto de tipos "en sí mismo"...
Las clases de plantillas se rompen en tiempo de compilación, pero las estructuras están bien.

Gracias por el mensaje.

Es un rudimento, lo arreglaremos.

 
TheXpert:

Gracias, no había pensado en el acceso de WinApi a la memoria del proceso.

P.D. El mensaje personal está cerrado, así que escribo aquí:
"En ingeniería inversa, el término hook tiene un significado específico: código para interceptar la invocación de una función o evento".