Fehler, Irrtümer, Fragen - Seite 2498

 
Andrei Trukhanovich:

In diesem Fall sollte das nicht der Fall sein.

Warum sollte die Größe hier nicht ein Vielfaches von vier sein?

Es hat sich herausgestellt, dass auch Klassen angeglichen werden können.

 
fxsaber:

Warum sollte die Größe hier nicht ein Vielfaches von vier sein?

Es hat sich herausgestellt, dass auch Klassen angeglichen werden können.

Die nächste externe Variable wird höchstwahrscheinlich mit einer Ausrichtung von 8 platziert werden, unabhängig von derGröße der Struktur.

 
Andrei Trukhanovich:

weil es sich um eine interne Ausrichtung handelt

Ich fürchte, dann ist der Sinn der Angleichung verloren gegangen.

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:

Ich fürchte, dann ist der Sinn der Angleichung verloren gegangen.

Der Sinn des Alignments besteht darin, die internen Variablenadressen zu einem Vielfachen des Alignments zu machen.

 
Andrei Trukhanovich:

Der Sinn des Alignments besteht darin, die internen Variablenadressen zu einem Vielfachen des Alignments zu machen.

Ich habe versucht, Ihre Aussage mit der Dokumentation zu vergleichen, aber ich verstehe es immer noch nicht.

 
Andrei Trukhanovich:

Offenbar eine ungesägte Sache. Hier liegt eindeutig bereits ein Fehler vor:

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

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

Ich habe versucht, Ihre Aussage mit der Dokumentation zu vergleichen, aber ich verstehe es nicht.

Ich glaube, die Hilfe wurde nicht aktualisiert, d.h. im Build mit C#-Unterstützung (im Winter?) gab es eine Beschreibung, wie die Ausrichtung jetzt funktioniert.

Ich habe gerade einen Artikel auf Hobber über die Ausrichtung gegoogelt. Ich denke, dass es in MT5 jetzt genauso funktionieren wirdhttps://habr.com/ru/post/142662/

 
Igor Makanu:

Ich denke, die Hilfe wurde nicht aktualisiert, es scheint, dass in der Build mit C#-Unterstützung (im Winter?) gab es eine Beschreibung, wie Ausrichtung funktioniert jetzt

Ich habe diesen Artikel auf hobber über die Ausrichtung gegoogelt und es scheint die gleiche Art und Weise in MT5 jetzthttps://habr.com/ru/post/142662/ zu funktionieren.

Ich habe den Artikel und die Kommentare dazu gelesen. Ich verstehe den Ausrichtungsalgorithmus überhaupt nicht. Sie ist auf pack(4) eingestellt, aber aus irgendeinem Grund ist etwas auf 2 und etwas auf 4 ausgerichtet.

 
fxsaber:

Ich habe den Artikel und die Kommentare dazu gelesen. Ich verstehe den Ausrichtungsalgorithmus überhaupt nicht. Es ist pack(4), aber aus irgendeinem Grund richtet sich etwas auf 2, etwas auf 4 aus.

Wozu die Mühe? Die Standard-Einzelausrichtung ist dieselbe wie bisher (und wird sich wahrscheinlich auch nicht ändern), der Packungsbezeichner ist schief. Wenn Sie es wirklich brauchen, können Sie das Add-on selbst einfügen.

 
Vict:

Wozu die Mühe? Die Standard-Einzelausrichtung ist die gleiche wie bisher (und wird sich wahrscheinlich auch nicht ändern), der Packungsbezeichner ist schief. Wenn Sie es wirklich brauchen, können Sie das Add-on selbst einfügen.

Ich möchte der Sache auf den Grund gehen.