Sizeof() Operator in C++
Sizeof() Operator
On this page we will discuss sizeof() operator in C++. sizeof()is a compile-time operator used to determine the size of variables or any user-defined, predefined datatypes .So we will see sizeof() operator in detail on this page with some programs.More about sizeof() operator
- Some times User is interested to know the amount of memory allocated by the compiler,
- C++ designers provided with
sizeof(data)
keyword to serve this purpose - The output of sizeof() operator is integer format and in terms of bytes.
Example:
cout << "size of long double :"; cout << sizeof(long double) << " bytes";
Output:
size of long double: 16 bytes
C++ program demonstrating the size of data types and variables
#include <iostream> using namespace std; int main() { //size with datatype names cout << "Size of char : " << sizeof(char) << endl; cout << "Size of int : " << sizeof(int) << endl; cout << "Size of short int : " << sizeof(short int) << endl; cout << "Size of double : " << sizeof(double) << endl; cout << "Size of wchar_t : " << sizeof(wchar_t) << endl; //size with variable names int a; float b; cout << "\nSize of a: " << sizeof(a); cout << "\nSize of b: " << sizeof(b); return 0; }
Output
Size of char : 1 Size of int : 4 Size of short int : 2 Size of double : 8 Size of wchar_t : 4 Size of a: 4 Size of b: 4
Size of Array
An array may occupy a lot of memory. We may want to know how much memory is it occupying.We can do this with the help of the following code
Example:
#include using namespace std; int main() { // Note : int size - 4 bytes, char size - 1 bytes int arr1[6] = {1, 2, 3, 4, 5, 6}; // interger array 5 * 4 bytes char arr2[] = {'H', 'e', 'l', 'l', 'o'}; // unsized character array 5 * 1 cout << "Size of int array: " << sizeof(arr1) << " bytes"; cout << "\nSize of char array: " << sizeof(arr2) << " bytes"; // we can even calculate number of elements in the array // (total array size) / (size of 1 array item) // 24 / 4 = 6 int items = sizeof(arr1)/sizeof(arr1[0]); cout << "\n\nItems in arr1: " << items; return 0; }
Output
Size of int array: 24 bytes Size of char array: 5 bytes Items in arr1: 6
Size of structure
The size of the structure is the sum of sizes of individual members which is displayed through structure variables
#include <iostream> using namespace std; int main() { // Note : int size - 4 bytes, char size - 1 bytes int arr1[6] = {1, 2, 3, 4, 5, 6}; // interger array 5 * 4 bytes char arr2[] = {'H', 'e', 'l', 'l', 'o'}; // unsized character array 5 * 1 cout << "Size of int array: " << sizeof(arr1) << " bytes"; cout << "\nSize of char array: " << sizeof(arr2) << " bytes"; // we can even calculate number of elements in the array // (total array size) / (size of 1 array item) // 24 / 4 = 6 int items = sizeof(arr1)/sizeof(arr1[0]); cout << "\n\nItems in arr1: " << items; return 0; }
Output
Size of s1: 32
Size of structure variable in above
- int (4 bytes) + char(20 * 1 = 20 bytes) + float(2 * 4 = 8 bytes) = 32 bytes
- Hence s1 is a variable of newly defined type student which can accommodate 32 bytes
Size of union
Memory allocated for the union is the size of the member which is having a larger size than all other members
#include <iostream> using namespace std; //declaring union union demo { int a; double b; }d1; // 8 bytes allocated int main() { cout << "Memory allocated: " << sizeof(d1) << " bytes"; // union memory is allocated basis per the largest datatype in union // here the largest data type is double: which has size 8 bytes // so size of union demo would be 8 bytes return 0; }
Output
Memory allocated: 8 bytes
Size of constants
For constants, the compiler performs implicit typecasting and by default determines the data type and allocates memory
#include<iostream> using namespace std; //declaring union union demo { int a; double b; }d1; // 8 bytes allocated int main() { cout << "Memory allocated: " << sizeof(d1) << " bytes"; // union memory is allocated basis per the largest datatype in union // here the largest data type is double: which has size 8 bytes // so size of union demo would be 8 bytes return 0; }
Output:
Size of integer constant: 4 Size of character constant : 1 Size of long constant: 8
Size of class and objects
- Memory allocation mechanism in classes and objects is the same as structures
- That is the size of the class is the sum of sizes of individual members
- The size of the class or object both mean the same
- The size of the class is displayed by the name of the class or the name of the object
#include<iostream> using namespace std; class test { public: int a = 2; float b = 3.0; double c = 5.1; }; //sum of sizes of int + float = 4 + 4 + 8 = 16 bytes int main() { // printing using name of class cout << "\nSize of test: " << sizeof(test); test t; // printing using name of object cout << "\nSize of test: " << sizeof(t); //same as above return 0; }
Output
Size of test: 16 Size of test: 16
Size of operator in an expression
Size of operator can be used in expressions like ordinary values and variables
#include<iostream> using namespace std; int main() { int a = 5; cout << a + sizeof(a) + sizeof(float); //5 + 4 + 4 = 13 return 0; }
Output
13sizeof(a) is replaced with integer constant 4 and sizeof(float) is replaced with integer constant 4, so 5 + 4 + 4 = 13
Nesting the sizeof() operator
size of() can be nested in any way like an ordinary expression
#include<iostream> using namespace std; int main() { // Note return type of sizeof is size_t datatype which has size of 8 bytes cout << sizeof(size_t) << endl; int num1, num2; cout << sizeof(num1 * sizeof(num2)); //sizeof iniside a sizeof // num1 * sizeof(num2) => datatype(int) * datatype(size_t) // result of this would be a value of datatype(size_t) // sizeof(size_t) => 8 }
Output
8 8
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
cout << sizeof(num1*sizeof(num2));//sizeof iniside a sizeof
please explain the above statement