2015-08-28 2 views
1

Существует структура:Зачем нужна длина нижнего уровня структуры до 4 байтов?

 [StructLayout(LayoutKind.Sequential)] 
     public struct WAVEFORMATEX 
     { 
      public ushort wFormatTag; 
      public ushort nChannels; 
      public ushort nSamplesPerSec; 
      public uint nAvgBytesPerSec; 
      public ushort nBlockAlign; 
      public ushort wBitsPerSample; 
      public ushort cbSize; 
     }; 
     public WAVEFORMATEX audioInfo = new WAVEFORMATEX(); 

Почему Marshal.SizeOf (AudioInfo) возвращает 20 вместо 16?

ответ

2

uint s похоже на выравнивание по 4-байтовым границам, поэтому между байтами nSamplesPerSec и nAvgBytesPerSec. Я предполагаю, что остальные два байта заполняются в конце структуры, чтобы сделать его общий размер также кратным четырем байтам.

Чтобы предотвратить это отступы от вводится, установите Pack поле атрибута StructLayout 1 или 2, например:

[StructLayout(LayoutKind.Sequential, Pack=2)] 
// ... 
+0

спасибо спариванию, пожалуйста, см мой другой вопрос здесь Http: // StackOverflow. ком/вопросы/32263209/уп-4-и-пак-1-делает-заместитель-структуры не в эквиваленте к его-с-декларации –

Смежные вопросы