Версия CLR имеет значение.До .NET 4 строковый объект имел дополнительное 4-байтовое поле, в котором хранилось поле «acity », m_arrayLength.Это поле больше не присутствует в .NET 4. В противном случае оно имеет стандартный заголовок объекта, 4 байта для блока синхронизации, 4 байта для указателя таблицы методов.Затем 4 байта для хранения длины строки (m_stringLength), за которыми следуют 2 байта для каждого символа в строке.И 0 символов, чтобы сделать его совместимым с нативным кодом.Объекты всегда кратны длине 4 байта, минимум 16 байтов.
Таким образом, пустая строка составляет 4 + 4 + 4 + 2 = 14 байтов, округленных до 16 байтов в .NET 4.0.20 байтов на более ранних версиях.Данные значения для x86.Все это очень хорошо видно в отладчике, проверьте этот ответ на наличие подсказок.