¿Hay alguna necesidad de tipo de datos «largo» en C y C++?

En C y C++ , hay cuatro tipos de datos diferentes disponibles para contener los números enteros, es decir, short, int, long y long long . Cada uno de estos tipos de datos requiere diferentes cantidades de memoria.
Pero hay una trampa, el tamaño del tipo de datos «largo» no es fijo a diferencia de otros tipos de datos. Varía de arquitecturas, sistema operativo e incluso con el compilador que estemos usando. En algunos de los sistemas se comporta como un tipo de datos int o un tipo de datos long long de la siguiente manera:

  OS               Architecture          Size
Windows       IA-32                     4 bytes
Windows       Intel® 64 or IA-64        4 bytes
Linux         IA-32                     4 bytes
Linux         Intel® 64 or IA-64        8 bytes
Mac OS X      IA-32                     4 bytes
Mac OS X      Intel® 64 or IA-64        8 bytes 

Bueno, también varía según el compilador. Pero antes de esto, comprendamos el concepto de compilador cruzado .
Un compilador cruzado es un compilador capaz de crear código ejecutable para una plataforma distinta de aquella en la que se ejecuta el compilador.
Por ejemplo, si compilo los siguientes programas en una arquitectura de 64 bits con Ubuntu de 64 bits, obtendré un resultado como este:

C++

// C++ program to check the size of 'long' 
// data type 
#include <bits/stdc++.h>
using namespace std;
  
int main() 
{ 
    cout << "Size of int = "<< sizeof(int) << endl; 
    cout << "Size of long = " << sizeof(long) << endl; 
    cout << "Size of long long = " << sizeof(long long); 
} 
  
// This code is contributed by shubhamsingh10

C

// C program to check the size of 'long'
//  data type
#include<stdio.h>
int main()
{
    printf("Size of int = %ld\n", sizeof(int));
    printf("Size of long = %ld\n", sizeof(long));
    printf("Size of long long = %ld", sizeof(long long));
}
Output in 32 bit gcc compiler:-
Size of int = 4
Size of long = 4
Size of long long = 8

Output in 64 bit gcc compiler:-
Size of int = 4
Size of long = 8
Size of long long = 8

Consulte este artículo para obtener más información sobre cómo compilar un programa con el compilador gcc de 32 o 64 bits.

De lo anterior, concluimos que el tamaño de solo el tipo de datos «largo» varía según el compilador. Ahora la pregunta es ¿qué está pasando exactamente aquí? Discutámoslo en la forma en que el compilador asigna memoria internamente.

La CPU llama a los datos de la RAM dando la dirección de la ubicación a MAR (registro de direcciones de memoria). Se encuentra la ubicación y los datos se transfieren a MDR (Memory Data Register). Estos datos se registran en uno de los Registros del Procesador para su posterior procesamiento. Es por eso que el tamaño del bus de datos determina el tamaño de los registros en el procesador. Ahora, un registro de 32 bits puede llamar datos de solo 4 bytes de tamaño a la vez. Y si el tamaño de los datos supera los 32 bits, se necesitarían dos ciclos de recuperación para tener los datos. Esto reduce la velocidad de la máquina de 32 bits en comparación con la de 64 bits, lo que completaría la operación en UN solo ciclo de recuperación. Entonces, obviamente, para los datos más pequeños, no hay diferencia si mis procesadores funcionan a la misma velocidad. Los compiladores están diseñados para generar el código más eficiente para la arquitectura de la máquina de destino.

Entonces, en resumen, el tamaño de una variable depende del compilador, ya que genera las instrucciones basadas en la arquitectura de destino y la arquitectura del sistema que solo se ocupa del tamaño del bus de datos y su transferencia.
Nota : Curiosamente, no necesitamos ningún tipo de datos «largo», ya que su reemplazo (int, largo largo) ya está disponible en el estándar C99 .

Sugerencia : si es importante para usted que los tipos de números enteros tengan el mismo tamaño en todas las plataformas Intel, considere reemplazar «largo» por «int» o «largo largo» . El tamaño del tipo entero «int» es de 4 bytes y el tamaño del tipo entero «largo largo» es de 8 bytes para todas las combinaciones anteriores de sistema operativo, arquitectura y compilador.

Referencias:
https://software.intel.com/en-us/articles/size-of-long-integer-type-on- different -architecture-and-os

Este artículo es una contribución de Shubham Bansal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *