c - sizeof void pointer
void-pointers (5)
Como JaredPar ya señaló, esto depende de la plataforma. En otras palabras, ¿cuántos bits utiliza la CPU utilizada para el direccionamiento de memoria? Para direcciones de 16 bits obtendría un tamaño de 2 bytes. ¿Está compilando código para un microcontrolador de 16 bits?
¿Por qué es sizeof
void pointer 2
?
El tamaño de un void*
es un valor dependiente de la plataforma. Normalmente, su valor es 4 u 8 para plataformas de 32 y 64 bits, respectivamente. Si obtiene 2 como valor, es probable que se esté ejecutando en una plataforma de codificación de 16 bits (o que tenga un error de codificación).
¿Podría publicar el código que está utilizando y más información sobre su entorno / sistema operativo?
El tamaño de un puntero es igual al tamaño de un entero. Puede tener 2 bytes en un compilador de 16 bits y 4 bytes en un compilador de 32 bits y 8 en un compilador de 64 bits.
void *ptr
, int *ptr
y char *ptr
le darán el mismo tamaño, pero si lo hace ptr++
, el puntero correspondiente saltará según los tipos de datos. Es decir, 1 posición en caso de void
y char
. Del mismo modo 4 posiciones en caso int
.
Según el estándar C en línea (n1256 borrador) :
6.2.5 tipos
...
27 Un puntero para anular tendrá los mismos requisitos de representación y alineación que un puntero a un tipo de carácter. 39) Del mismo modo, los punteros a versiones calificadas o no calificadas de tipos compatibles deben tener los mismos requisitos de representación y alineación. Todos los punteros a los tipos de estructura deben tener los mismos requisitos de representación y alineación que los demás. Todos los punteros a los tipos de unión deben tener los mismos requisitos de representación y alineación que los demás. Los punteros a otros tipos no necesitan tener los mismos requisitos de representación o alineación.
En cuanto a por qué los punteros void y char tienen un tamaño de 2 en su sistema, sospecho que es porque está en una plataforma de 16 bits.
Un puntero almacena una dirección de memoria que apunta a otra cosa. El tamaño de un puntero depende de su plataforma. En una plataforma de 32 bits, necesita 32 bits o cuatro bytes para almacenar una dirección de memoria, por lo que el tamaño de cualquier puntero devolverá 4.
Si sizeof (void *) es 2, probablemente esté ejecutando en una plataforma de 16 bits.