CSharp中Struct内存大小¶
sizeof只适用于值类型,并且需要在unsafe上下文环境中使用
也可以使用System.Runtime.InteropServices.Marshal.SizeOf()
- 新建C#控制台项目,项目设置
unsafe允许不安全代码
Program.cs
using System;
namespace test
{
class Program
{
public struct A //size 8=a(4)+b(4)
{
public char a;
public int b;
}
public unsafe struct B //size 12=a(4)+b(4)+c(4)
{
public char a;
public int b;
public byte c;
}
public struct C //size 8=a(2)+c(2)+b(4)
{
public char a;
public byte c;
public int b;
}
public struct D //size 2=a(2)
{
public char a;
}
static void Main(string[] args)
{
TestSize();
}
static unsafe void TestSize()
{
//A :8,B :12,C :8,D :2
Console.WriteLine($"A :{sizeof(A)},B :{sizeof(B)},C :{sizeof(C)},D :{sizeof(D)}");
}
}
}
ref: C#中sizeof的用法
ref: C#sizeof用法
详细参考:C++ struct union数据对齐