long is a keyword in Java that symbolises the Long datatype. The long data type is a 64-bit two’s complement integer with:
- Size: 64 bit
- Value: -263 to 263-1.
Output of 64 bit GCC compiler would give the size of long as 8 whereas on 32 bit GCC compiler the size would be 4. So it varies from compiler to compiler. Now the question is what exactly is happening here? Let’s discuss it in the way of how compiler allocates memory internally.
CPU calls data from RAM by giving the address of the location to MAR (Memory Address Register). The location is found and the data is transferred to MDR (Memory Data Register). This data is recorded in one of the Registers in the Processor for further processing. That’s why size of Data Bus determines the size of Registers in Processor. Now, a 32 bit register can call data of 4 bytes size only, at a time. And if the data size exceeds 32 bits, then it would required two cycles of fetching to have the data in it. This slows down the speed of 32 bit Machine compared to 64 bit, which would complete the operation in ONE fetch cycle only. So, obviously for the smaller data, it makes no difference if my processors are clocked at the same speed. Compilers are designed to generate the most efficient code for the target machine architecture.
Note: Interestingly we don’t have any need of “long” data type as their replacement(int, long long) is already available from C99 standard.
In the below program, all the possible variables with long datatype are defined and their sizes are calculated and print using sizeof() operator.
Below is the C program to find the demonstrate working of long keyword:
Size of longType is: 8 Size of integerType is: 4 Size of longIntegerType is: 8 Size of longLongIntegerType is: 8 Size of floatType is: 4 Size of doubleType is: 8 Size of longDoubleType is: 16