En C++ cuando lo hago new
(o incluso malloc) ¿hay alguna garantía de que la dirección de devolución será mayor que un cierto valor? Porque ... en este proyecto lo encuentro muy útil para usar 0-1k como una enumeración. Pero no me gustaría hacer eso si es posible obtener un valor tan bajo. Mis únicos sistemas de destino son las CPU de 32 o 64 bits con la ventana OS/linux y mac.¿Está garantizado que el puntero sea> cierto valor?
¿El estándar dice algo acerca de los punteros? ¿Windows o Linux dicen algo sobre su tiempo de ejecución C y cuál es la dirección de memoria más baja (para RAM)?
-editar- termino modificando mi sobrecarga new
para verificar si la dirección es superior a 1k. Llamo a std :: terminate si no es así.
¿Por qué usa enums como punteros? – Pubby
@Pubby: es común (particularmente en intérpretes y juegos) confiar en las características del puntero específicas de la plataforma para incluir información adicional en ellas, generalmente para eliminar la indirección.Debido a las reglas de alineación, los tres bits inferiores son gratuitos; además, los sistemas de 64 bits generalmente tienen punteros de espacio de usuario con solo 48 bits significativos; el resto son todos '1' o' 0', por lo que puede empaquetar un puntero en la mantisa (53 bits) de un 'doble' con sus bits superiores establecidos para representar' NaN'. Luego, las banderas de orden bajo le permiten elegir rápidamente entre representaciones con enmascaramiento y desplazamiento. –
Parece que solo necesito 6 bits, así que ni siquiera necesitaré los primeros 1 o 4k :). –