C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Compile-time: Sizeof is evaluated at compile-time. When you execute this program, it will just use constant numbers.
Important: The program does not compute the size of reference types such as string or array—this is not possible.
Info: We see commented-out sizeof expressions, which would not compile because they attempt to compute the size of a reference type.
Tip: The .NET Framework uses a virtualized type layout system. Memory layout can change between versions—so computing it is harder.
C# program that uses sizeof
using System;
class Program
{
static void Main()
{
//
// Evaluate the size of some value types.
// ... Invalid sizeof expressions are commented out here.
// ... The results are integers printed on separate lines.
//
int size1 = sizeof(int);
int size2 = 0; // sizeof(int[]);
int size3 = 0; // sizeof(string);
int size4 = 0; // sizeof(IntPtr);
int size5 = sizeof(decimal);
int size6 = sizeof(char);
int size7 = sizeof(bool);
int size8 = sizeof(byte);
int size9 = sizeof(Int16); // Equal to short
int size10 = sizeof(Int32); // Equal to int
int size11 = sizeof(Int64); // Equal to long
//
// Print each sizeof expression result.
//
Console.WriteLine(
"{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}\n{10}",
size1, size2, size3, size4, size5, size6, size7, size8,
size9, size10, size11);
}
}
Output
4
0
0
0
16
2
1
1
2
4
8
Important: Sizeof does not support reference types. We can only use it on things like int and uint.
Also: Size in previous versions of .NET was allowable only in unsafe contexts, but this has been relaxed. You can now use sizeof anywhere.
UnsafeValueTypeError 1:
Cannot take the address of, get the size of,
or declare a pointer to a managed type (int[])
Error 2:
int[] does not have a predefined size,
therefore sizeof can only be used in an unsafe context
(consider using System.Runtime.InteropServices.Marshal.SizeOf)
And: This occurs before execution. In other words, the sizeof expression can be evaluated statically.
Thus: Sizeof will cause no performance impact (versus an int). You can test this by inspecting the program in IL Disassembler.
Tip: You will see that no sizeof instructions exist in the intermediate language. It is not part of the IL.
IL Disassembler