En C#, tanto sizeof
como Marshal.SizeOf
se utilizan para obtener el tamaño en bytes de un tipo de datos o estructura. Sin embargo, hay diferencias clave en su uso y comportamiento.
sizeof
en C#
sizeof
es un operador en C# que devuelve el tamaño en bytes de un tipo primitivo o una estructura no administrada.
struct
, int
, float
, etc.).
unsafe
si se usa con estructuras personalizadas.
sizeof
using System;
class Program
{
static void Main()
{
Console.WriteLine(sizeof(int)); // Salida: 4
Console.WriteLine(sizeof(double)); // Salida: 8
}
}
unsafe
using System;
struct MiStruct
{
public int x;
public double y;
}
class Program
{
static unsafe void Main()
{
Console.WriteLine(sizeof(MiStruct)); // Salida: 16
}
}
Marshal.SizeOf
en C#
Marshal.SizeOf
pertenece a System.Runtime.InteropServices
.
unsafe
.
Marshal.SizeOf
using System;
using System.Runtime.InteropServices;
struct MiStruct
{
public int x;
public double y;
}
class Program
{
static void Main()
{
Console.WriteLine(Marshal.SizeOf(typeof(MiStruct))); // Salida: 16 (dependiendo de la alineación)
}
}
Característica |
sizeof
|
Marshal.SizeOf
|
---|---|---|
Evaluación | En compilación | En ejecución |
Tipos soportados | Tipos primitivos y structs no administradas | Structs administradas y no administradas |
Requiere unsafe
|
Sí, en structs personalizadas | No |
Usado en P/Invoke | No | Sí |
Afectado por StructLayout
|
No | Sí |
Usa sizeof
cuando trabajes con tipos primitivos o estructuras simples en código seguro o sin interoperabilidad. Usa Marshal.SizeOf
cuando necesites obtener el tamaño en memoria en tiempo de ejecución, especialmente para interoperabilidad con código nativo.
Jorge García
Fullstack developer