How to use sizeof() operator to find the size of a data type or a variable in C#

The sizeof operator in C# returns the size of a data type in bytes. It can only be used with value types and is particularly useful when working with unmanaged code or memory allocation scenarios.

Syntax

Following is the syntax for using the sizeof operator −

sizeof(datatype)

For example, to find the size of an int data type −

sizeof(int);

Key Rules

  • The sizeof operator can only be used with value types, not reference types.

  • It returns the size in bytes.

  • For built-in types, the size is fixed regardless of the platform (32-bit or 64-bit).

  • When used with user-defined structs, it must be in an unsafe context.

C# Data Type Sizes (in bytes) byte: 1 char: 2 short: 2 int: 4 long: 8 float: 4 double: 8 decimal: 16 bool: 1 All sizes are platform-independent Memory layout may vary due to padding and alignment

Using sizeof with Built-in Data Types

Example

using System;

class Program {
   static void Main(string[] args) {
      Console.WriteLine("The size of byte is {0}", sizeof(byte));
      Console.WriteLine("The size of char is {0}", sizeof(char));
      Console.WriteLine("The size of short is {0}", sizeof(short));
      Console.WriteLine("The size of int is {0}", sizeof(int));
      Console.WriteLine("The size of long is {0}", sizeof(long));
      Console.WriteLine("The size of float is {0}", sizeof(float));
      Console.WriteLine("The size of double is {0}", sizeof(double));
      Console.WriteLine("The size of decimal is {0}", sizeof(decimal));
      Console.WriteLine("The size of bool is {0}", sizeof(bool));
   }
}

The output of the above code is −

The size of byte is 1
The size of char is 2
The size of short is 2
The size of int is 4
The size of long is 8
The size of float is 4
The size of double is 8
The size of decimal is 16
The size of bool is 1

Using sizeof with User-Defined Structs

When using sizeof with user-defined structs, you must use it within an unsafe context

Example

using System;

struct Point {
   public int x;
   public int y;
}

struct Employee {
   public int id;
   public double salary;
   public bool isActive;
}

class Program {
   static unsafe void Main(string[] args) {
      Console.WriteLine("Size of Point struct: {0} bytes", sizeof(Point));
      Console.WriteLine("Size of Employee struct: {0} bytes", sizeof(Employee));
      
      // Breakdown of Employee struct:
      Console.WriteLine("int: {0}, double: {1}, bool: {2}", 
                       sizeof(int), sizeof(double), sizeof(bool));
   }
}

The output of the above code is −

Size of Point struct: 8 bytes
Size of Employee struct: 24 bytes
int: 4, double: 8, bool: 1

Comparison with Other Methods

Method Usage Context Required
sizeof() Compile-time size of value types Unsafe for custom structs
Marshal.SizeOf() Runtime size including marshaling Safe context
Type.GetSize() Not available in C# -

Conclusion

The sizeof operator in C# provides the size of value types in bytes at compile-time. It's essential for memory calculations in unsafe code and interoperability scenarios. Remember that it cannot be used with reference types and requires an unsafe context for user-defined structs.

Updated on: 2026-03-17T07:04:35+05:30

471 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements