Implemente su propio tamaño de

Aquí hay una implementación.

#include<stdio.h>
#define my_sizeof(type) (char *)(&type+1)-(char*)(&type)
int main()
{
    double x;
    printf("%ld", my_sizeof(x));
    getchar();
    return 0;
}

El tipo es como una variable local para la macro. &tipo da la dirección de la variable (doble x) declarada en el programa y al incrementarla en 1 da la dirección donde se puede almacenar la siguiente variable de tipo x (aquí addr_of(x) + 8, pues el tamaño de un doble es 8B ).
La diferencia da como resultado cuantas variables de tipo x se pueden almacenar en esa cantidad de memoria que obviamente será 1 para el tipo x (porque incrementarlo en 1 y sacar la diferencia es lo que hemos hecho). Escribirlo en char* y tomar la diferencia nos dirá cuántas variables de tipo char se pueden almacenar en el espacio de memoria dado (la diferencia). Dado que cada carácter requiere solo 1B de memoria, por lo tanto (cantidad de memoria)/1 dará la cantidad de bytes entre dos ubicaciones de memoria sucesivas del tipo de la variable pasada a la macro y, por lo tanto, la cantidad de memoria que la variable de tipo x requiere.
Pero no podrá pasar ningún literal a esta macro y conocer su tamaño.

También puede implementar usando la función en lugar de una macro, pero la implementación de la función no se puede hacer en C ya que C no admite la sobrecarga de funciones y se supone que sizeof() recibe parámetros de todos los tipos de datos.

Tenga en cuenta que la implementación anterior asume que el tamaño del carácter es de un byte.

Complejidad de tiempo: O(1)
Complejidad de espacio: O(1)

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 *