错误、漏洞、问题 - 页 2498

 
Andrei Trukhanovich:

在这种情况下,我认为它不应该。

为什么这里的大小不应该是四的倍数?

事实证明,班级也可以是统一的。

 
fxsaber:

为什么这里的大小不应该是四的倍数?

事实证明,班级也可以是统一的。

下一个外部变量很可能以8的对齐方式放置,而不管结构的大小

 
Andrei Trukhanovich:

因为它是一个内部调整

那么我恐怕就失去了对准的意义

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:

那么我恐怕就失去了对准的意义

对齐的意义在于使内部变量的地址是对齐的倍数。

 
Andrei Trukhanovich:

对齐的意义在于使内部变量的地址是对齐的倍数。

我试图将你的陈述与文件 进行比较,但我还是不明白。

 
Andrei Trukhanovich:

显然,这是一个没有经过锯齿的东西。这里显然已经有了一个错误。

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

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

我试图将你的陈述与《文件》 进行比较,但我不明白。

我想帮助还没有更新,也就是说,在支持C#的版本中(在冬天?

我刚刚在hobber上搜索了一篇关于对齐的文章。我想它现在在MT5中也会以同样的方式工作https://habr.com/ru/post/142662/

 
Igor Makanu:

我认为帮助没有被更新,似乎在支持C#的构建中(在冬天),有一个关于如何对齐的描述,现在

我在hobber上搜索了这篇关于对齐的文章。 现在看来,同样的事情在MT5中也会起作用https://habr.com/ru/post/142662/

我读了这篇文章和对它的评论。我完全不理解对齐算法。它被设置为pack(4),但由于某些原因,有些东西对准了2,有些东西对准了4。

 
fxsaber:

我跑了这篇文章和对它的评论。我完全不理解对齐算法。它是pack(4),但由于某些原因,有些东西对准了2,有些东西对准了4。

何必呢?默认的单一对齐方式和以前一样(而且不太可能改变),包指定是歪的。如果你非常需要它,你可以自己插入插件。

 
Vict:

何必呢?默认的单一对齐方式和以前一样(而且不太可能改变),包指定是歪的。如果你真的需要,你可以自己插入插件。

我想弄清楚它的底细。