2009-10-15 14 views
10

Permítanme primero aclarar que ya estoy muy familiarizado con las definiciones de size_t y intptr_t, y no quiero ninguna repetición de lo que logran.size_t es el tamaño del puntero en la práctica

En cambio, me gustaría saber lo siguiente. ¿Sabe de cualquier plataforma , excepto x86/DOS (con sus modelos de memoria insoportables) donde el elenco

void* a = ...; 
size_t b = (size_t)a; 

realidad pierde bits o bytes?

Gracias!

+7

¿por qué lanzarías un puntero a size_t ??? –

+0

Como nota al margen, ni siquiera puedo empezar a imaginar de dónde podría venir esa pregunta. ¿Por qué querrías hacer semejante lanzamiento? El tamaño de 'size_t' y el tamaño del puntero no están relacionados por completo, por lo que es lógico suponer que tales plataformas existen en general, independientemente de si existen en la realidad. – AnT

+1

Puede no ser una buena práctica suponer que el tamaño de 'size_t' y el tamaño de los punteros son los mismos y que no se debe escribir ningún código nuevo con esa suposición; puedo ver de dónde podría venir una pregunta como esta: código heredado. Me imagino que hay * muchos * códigos que hacen exactamente esta suposición. Al igual que hay una gran cantidad de código que supone una int o una larga es de 32 bits (ni más ni menos, es por eso que MS eligió el modelo LLP64 para Win64). Alguien (tal vez incluso Jonas) podría querer determinar si vale la pena gastar tiempo y esfuerzo para cambiar proactivamente el código heredado. –

Respuesta

7

AFAIK, en AS/400 punteros son de 128 bits, pero size_t is defined to be 32-bit.

+0

¡Interesante! ¿Qué rinde sizeof (long)? –

+0

que parece que es largo [64 bits] (http://search400.techtarget.com/tip/0,289483,sid3_gci1114170,00.html) pero no puedo decirlo con certeza. –

+1

Una pregunta más importante es: ¿Puedes darnos un ejemplo de dónde lanzar un puntero a size_t es un código válido? –

Cuestiones relacionadas