Detalles de la implementación del puntero en C
Me gustaría saberArquitecturas que violan los supuestos. He enumerado a continuación. Además, me gustaría saber si alguna de las suposiciones es falsa para todas las arquitecturas (es decir, si alguna de ellas está completamente equivocada).
sizeof (int *) == sizeof (char *) == sizeof (void *) == sizeof (func_ptr *)
La representación en memoria de todos los punteros para una arquitectura dada es la misma independientemente del tipo de datos al que se apunta.
La representación en memoria de un puntero es lo mismo que un entero de la misma longitud de bit que la arquitectura.
La multiplicación y división de tipos de datos de puntero solo están prohibidas por el compilador. NOTA: Sí, sé que esto es absurdo. Lo que quiero decir es: ¿hay soporte de hardware para prohibir este uso incorrecto?
Todos los valores de puntero se pueden convertir en un solo entero. En otras palabras, ¿qué arquitecturas siguen haciendo uso de los segmentos y las compensaciones?
Incrementar un puntero es equivalente a agregarsizeof(the pointed data type)
a la dirección de memoria almacenada por el puntero. Sip
es unint32*
entoncesp+1
es igual a la dirección de memoria 4 bytes despuésp
.
Estoy más acostumbrado a los punteros que se utilizan en un espacio de memoria virtual contiguo. Para ese uso, generalmente puedo pensar en ellos como direcciones en una línea numérica. Ver pregunta de desbordamiento de pilaComparacion puntero.