Какие бывают типы переменных в C#?

Подскажите пожалуйста базовые типы в C# и их размер в памяти.

1)Целые типы: sbyte - 8bit, byte - 8bit, short - 16bit, ushort - 16bit, int - 32bit, uint - 32bit, long - 64 bit, ulong - 64bit.

2)Типы, в которых сохраняются данные с плавающей запятой (соответствуют вещественному типу):

float - 32bit, double - 64bit, decimal - 128bit.

3)Символьный тип:

char - 16bit.

4)Логический тип:

bool - 1bit.

5)Строчный тип:

string - строка является ссылочным типом, поэтому первые 4 байта содержат SyncBlockIndex, а вторые 4 байта содержат указатель на тип.
Размер строки = 4 4 ...
Как было выше сказано, в буфере хранится длина строки — это поле типа int, значит еще 4 байта.
Размер строки = 4 4 4 ...
Для того, чтобы быстро передать строку в неуправляемый код (без копирования) в конце каждой строки стоит null-терминированный символ, который занимает 2 байта, значит
Размер строки = 4 4 4 2 ...
Осталось вспомнить, что каждый символ в строке находится в UTF -16 кодировке значит, занимает так же 2 байта, следовательно

Размер строки = 4 4 4 2 2 * length = 14 2 * length

Учтем еще один нюанс, и мы у цели. А именно менеджер памяти в CLR выделяет память кратной 4 байтам (4, 8, 12, 16, 20, 24, ...), то есть если длина строки суммарно будет занимать 34 байта, то выделено будет 36 байта. Нам необходимо округлить наше значение к ближайшему большему кратному четырем числу, для этого необходимо:

Размер строки = 4 * ((14 2 * length 3) / 4) (деление естественно целочисленное).