Errores, fallos, preguntas - página 2498

 
Andrei Trukhanovich:

En ese caso, en mi opinión, no debería.

¿Por qué el tamaño no debería ser un múltiplo de cuatro?

Resulta que las clases también se pueden alinear.

 
fxsaber:

¿Por qué el tamaño no debería ser un múltiplo de cuatro?

Resulta que las clases también se pueden alinear.

porque se trata de una alineación interna. Lo más probable es que la siguiente variable externa se coloque con una alineación de 8, independientemente deltamaño de la estructura.

 
Andrei Trukhanovich:

porque es una alineación interna

Entonces me temo que el punto de alineación se pierde

struct A pack(4)
{
  short j;
};

void OnStart()
{
  Print(sizeof(A)); // 2
  
  const int handle = FileOpen(__FILE__, FILE_WRITE | FILE_BIN);
  
  if (handle != INVALID_HANDLE)
  {
    A a = {0};
    
    FileWriteStruct(handle, a);
    Print(FileTell(handle)); // 2
    
    FileClose(handle);
  }
}
 
fxsaber:

Entonces me temo que el punto de alineación se pierde

el objetivo de la alineación es hacer que las direcciones de las variables internas sean un múltiplo de la alineación.

 
Andrei Trukhanovich:

el objetivo de la alineación es hacer que las direcciones de las variables internas sean un múltiplo de la alineación.

He intentado comparar su declaración con la Documentación, pero sigo sin entenderlo.

 
Andrei Trukhanovich:

Una cosa sin aserrar, aparentemente. Está claro que aquí ya hay un error:

struct A pack(4)
{
  short j;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 4
   return;
}
 
fxsaber:

He intentado comparar su declaración con la de Documentación, pero no lo entiendo.

Creo que la ayuda no se ha actualizado, es decir, en la compilación con soporte de C# (¿en invierno?) había una descripción de cómo funciona ahora la alineación.

Acabo de buscar en Google un artículo en Hobber sobre la alineación. Creo que ahora funcionará de la misma manera en MT5https://habr.com/ru/post/142662/

 
Igor Makanu:

Creo que la ayuda no se ha actualizado, parece que en la build con soporte de C# (en invierno?) había una descripción de cómo funciona la alineación ahora

Busqué en Google este artículo en hobber sobre la alineación. Parece que lo mismo funcionará en MT5 ahorahttps://habr.com/ru/post/142662/

He leído el artículo y los comentarios al mismo. No entiendo en absoluto el algoritmo de alineación. Está ajustado a pack(4) pero por alguna razón algo se alinea a 2 y algo se alinea a 4.

 
fxsaber:

He publicado el artículo y los comentarios sobre el mismo. No entiendo en absoluto el algoritmo de alineación. Es pack(4), pero por alguna razón algo se alinea con 2, algo con 4.

¿Por qué molestarse? La alineación simple por defecto es la misma que antes (y es poco probable que cambie), el especificador de paquete está torcido. Si realmente lo necesitas, puedes insertar el complemento tú mismo.

 
Vict:

¿Por qué molestarse? La alineación simple por defecto es la misma que antes (y es poco probable que cambie), el especificador de paquete está torcido. Si realmente lo necesitas, puedes insertar el complemento tú mismo.

Quiero llegar al fondo del asunto.

Razón de la queja: