Почему односимвольная строка .NET составляет 32 байта в x64?

Я пытался выяснить накладные расходы строка в .NET 4 x64. Это то, что у меня есть.

  • 16-байтовый заголовок объекта для x64
  • 4 байта для поля stringLength (arrayLength отсутствует в .NET 4)
  • (length + 1) * 2 байта для содержимого строки (UTF-16, завершается нулем)

Таким образом, вы ожидаете, что строка из 1 символа будет иметь размер 16 + 4 + 4 = 24 байта . Она делится на 8 так что он не должен нуждаться в заполнении.

Но когда я смотрю на размеры в WinDbg, я вижу, что они берут 32 байта . Когда я ! dumpobject , они говорят, что их размер равен 28 байт, которые, как я полагаю, округляются до 32. Что происходит? Происходит ли еще один раунд выравнивания памяти?

7
задан RandomEngy 10 October 2011 в 18:18
поделиться