In C++ quando faccio new
(o anche malloc) c'è qualche garanzia che l'indirizzo di ritorno sarà maggiore di un certo valore? Perché ... in questo progetto trovo molto utile usare 0-1k come enum. Ma non vorrei farlo se è possibile ottenere un valore così basso. I miei unici sistemi di destinazione sono CPU a 32 o 64 bit con la finestra OS/Linux e Mac.Il puntatore è garantito per> un certo valore?
Lo standard dice qualcosa sui puntatori? Windows o Linux dicono qualcosa sul loro runtime C e quale è l'indirizzo di memoria più basso (per ram)?
-edit- finisco per modificare il mio sovraccarico new
per verificare se l'indirizzo è superiore a> 1k. Io chiamo std :: termina se non lo fa.
Perché stai usando le enumerazioni come indicatori? – Pubby
@Pubby: è comune (in particolare negli interpreti e nei giochi) affidarsi a caratteristiche del puntatore specifiche della piattaforma per inserire ulteriori informazioni in esse, di solito per eliminare l'indirezione.A causa delle regole di allineamento, i tre bit inferiori sono liberi; inoltre, i sistemi a 64 bit hanno generalmente puntatori userspace con solo 48 bit significativi; il resto sono tutti '1' o' 0', quindi puoi impacchettare un puntatore nella mantissa (53-bit) di un 'double' con i suoi bit superiori impostati per rappresentare' NaN'. Quindi i flag di ordine basso ti consentono di scegliere rapidamente tra le rappresentazioni con mascheramento e spostamento. –
Sembra che mi bastino solo 6 bit, quindi non ho nemmeno bisogno del primo 1 o 4k :). –