This C# operator returns a size: this is the number of bytes a type (the argument) uses. Due to the virtualized type layout, sizeof
is limited.
Sizeof can only compute the byte
size of value types. Because of its limitations, the sizeof
operator is often incorrectly used.
This program uses many local variables and assigns these locals to the result of sizeof
expressions. Some expressions are commented out—these won't compile.
string
or array—this is not possible.sizeof
expressions, which would not compile because they attempt to compute the sizeof
a reference type.using System; // // 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);4 0 0 0 16 2 1 1 2 4 8
Developers sometimes try to compute the size of result for a reference type at some point. If you do that, you will get the "Cannot take the address of" error shown.
int
and uint
.sizeof
anywhere.Cannot take the address of, get the size of, or declare a pointer to a managed type (int[])int[] does not have a predefined size, therefore sizeof can only be used in an unsafe context (consider using System.Runtime.InteropServices.Marshal.SizeOf)
We examined the sizeof
operator and sizeof
expressions. And we saw the evaluation results of this operator on common value types and type aliases.