Какой размер имеют ячейки памяти? - C#
Формулировка задачи:
Просто стало интересно, сколько памяти занимают различные типы. Но запуталась окончательно. В комментариях отображены адреса ячеек, младшие два разряда. Например, char - это 2-байтный тип, а занимает в памяти 8 единиц. А как понимаю, здесь единица - это 1 байт. а тип decimal итого 20 байт занял, хотя должен 16. У меня 64-х битная система. Ячейка памяти в связи с этим должна быть равна 8 байт. Но почему так объекты по странному размещаются в памяти? Перечитала уже кучу статей и еще больше запуталась.
unsafe
{
int i = 5;
int* p1 = &i;
Console.WriteLine(i);
Console.WriteLine((int)p1);//......56
ulong s = 10;
ulong* p2 = &s;
Console.WriteLine(s);
Console.WriteLine((int)p2);//......44
char q = 's';
char* p3 = &q;
Console.WriteLine(q);
Console.WriteLine((int)p3);//......36
decimal r = 2;
decimal* p4 = &r;
Console.WriteLine(r);
Console.WriteLine((int)p4);//......16
Console.ReadLine();
}Решение задачи: «Какой размер имеют ячейки памяти?»
textual
Листинг программы
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct TypeSize
{
public int a;
public ulong b;
public char c;
public decimal d;
public byte max_value;
}
unsafe static void Main(string[] args)
{
var ts = new TypeSize();
Console.WriteLine("size of 'a': {0}", (ulong)&ts.b - (ulong)&ts.a);
Console.WriteLine("size of 'b': {0}", (ulong)&ts.c - (ulong)&ts.b);
Console.WriteLine("size of 'c': {0}", (ulong)&ts.d - (ulong)&ts.c);
Console.WriteLine("size of 'd': {0}", (ulong)&ts.max_value - (ulong)&ts.d);
}