Errori, bug, domande - pagina 2498

 
Andrei Trukhanovich:

In questo caso, imho, non dovrebbe.

Perché la dimensione qui non dovrebbe essere un multiplo di quattro?

Si scopre che anche le classi possono essere allineate.

 
fxsaber:

Perché la dimensione qui non dovrebbe essere un multiplo di quattro?

Si scopre che anche le classi possono essere allineate.

perché questo è un allineamento interno. La prossima variabile esterna sarà molto probabilmente posizionata con un allineamento di 8, indipendentemente dalladimensione della struttura.

 
Andrei Trukhanovich:

perché è un allineamento interno

Allora temo che il punto di allineamento si perda

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:

Allora temo che si perda il punto di allineamento

lo scopo dell'allineamento è di rendere gli indirizzi delle variabili interne un multiplo dell'allineamento.

 
Andrei Trukhanovich:

lo scopo dell'allineamento è di rendere gli indirizzi delle variabili interne un multiplo dell'allineamento.

Ho cercato di confrontare la tua dichiarazione con la documentazione, ma continuo a non capire.

 
Andrei Trukhanovich:

Una cosa non segata, a quanto pare. È chiaro che qui c'è già un errore:

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

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

Ho cercato di confrontare la tua dichiarazione con Documentation, ma non capisco.

Penso che l'aiuto non sia stato aggiornato, cioè nella build con supporto C# (in inverno?) c'era una descrizione di come funziona ora l'allineamento.

Ho appena cercato su Google un articolo su Hobber sull'allineamento. Penso che funzionerà allo stesso modo in MT5 orahttps://habr.com/ru/post/142662/

 
Igor Makanu:

Penso che l'aiuto non sia stato aggiornato, sembra che nella build con supporto C# (in inverno?) ci fosse una descrizione di come funziona l'allineamento ora

Ho cercato su Google questo articolo su hobber sull'allineamento e sembra funzionare allo stesso modo in MT5 orahttps://habr.com/ru/post/142662/

Ho letto l'articolo e i commenti ad esso. Non capisco affatto l'algoritmo di allineamento. È impostato su pack(4) ma per qualche motivo qualcosa è allineato a 2 e qualcosa a 4.

 
fxsaber:

Ho letto l'articolo e i relativi commenti. Non capisco affatto l'algoritmo di allineamento. È pack(4), ma per qualche motivo qualcosa si allinea a 2, qualcosa a 4.

Perché preoccuparsi? L'allineamento singolo di default è lo stesso di prima (ed è improbabile che cambi), lo specificatore di pacchetto è storto. Se ne hai bisogno, puoi inserire l'add-on da solo.

 
Vict:

Perché preoccuparsi? L'allineamento singolo di default è lo stesso di prima (ed è improbabile che cambi), lo specificatore di pacchetto è storto. Se ne avete davvero bisogno, potete inserire un add-on voi stessi.

Voglio andare in fondo alla questione.