TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to C-SHARP

C# sizeof Keyword

Use the sizeof operator. Sizeof returns the number of bytes in a type.
Sizeof. This operator returns a size. This is the number of bytes a type (the argument) uses. Due to the virtualized type layout, sizeof is limited.Keywords
Sizeof can only compute the byte size of value types. Because of its limitations, the sizeof operator is often incorrectly used. It often results in errors.
Example. 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.

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
Errors. Developers sometimes try to compute the sizeof result for a reference type at some point. If you do that, you will get the "Cannot take the address of" error shown.

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.

UnsafeValueType
Error 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)
Sizeof table. Each value type can have its sizeof expression computed at compile-time. If you are looking for a sizeof computation table, the Microsoft reference is best.Sizeof: Microsoft Docs
Performance. Compiler theory breaks up the interpretation of computer programs into many phases. The sizeof operator can be evaluated during the initial compilation phase.

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
A summary. We examined the sizeof operator and sizeof expressions. We saw the evaluation results of this operator on common value types and type aliases.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf