guide,pc,modifiche

64-bit modelli di dati


In programmi a 32 bit, puntatori e tipi di dati come numeri interi in genere hanno la stessa lunghezza;. questo non è necessariamente vero su macchine a 64 bit [ 23 ] [ 24 ] [ 25 ] tipi di miscelazione di dati in linguaggi di programmazione come C e la sua discendenti come il C + + e Objective-C può quindi funzionare a 32 bit implementazioni, ma non a 64 bit implementazioni.In molti ambienti di programmazione per C e C linguaggi derivati ​​su macchine a 64 bit, "int" variabili sono ancora 32 bit, ma interi lunghi e puntatori sono a 64 bit. Questi sono descritti come avere unLP64 modello di dati . Un'altra alternativa è la ILP64 modello di dati in cui tutti e tre i tipi di dati sono a 64 bit, e persino SILP64 dove "corto" numeri interi e 64 bit. [ citazione necessaria ] Tuttavia, nella maggior parte dei casi le modifiche necessarie sono relativamente minori e semplice, e molti ben scritti i programmi possono essere semplicemente ricompilati per il nuovo ambiente senza modifiche.Un'altra alternativa è il LLP64 modello, che mantiene la compatibilità con il codice a 32 bit, lasciando entrambe le int e fino a quando a 32-bit. "LL" si riferisce alla "long long integer" tipo, che è almeno 64 bit su tutte le piattaforme, compresi ambienti a 32 bit.64-bit di dati modelliDati del modellobreve (integer)intlungo (integer)long longpuntatori / size_tEsempio di sistemi operativiLLP64 / IL32P641632326464Microsoft Windows (X64/IA-64)LP64 / I32LP641632646464La maggior parte Unix e Unix-like sistemi, ad esempio Solaris , Linux e Mac OS X , z / OSILP641664646464HAL Computer Systems porto di Solaris SPARC64SILP646464646464UnicosMolti 64-bit compilatori oggi utilizzare il LP64 modello (tra cui Solaris, AIX , HP-UX , Linux, Mac OS X , FreeBSD , e IBM z / OS compilatori nativi). Microsoft Visual C + + compilatore utilizza il LLP64modello. Lo svantaggio del modello LP64 è che la memorizzazione a lungo in un overflow può int. D'altra parte, gettando un puntatore ad un tempo di lavoro. Nel modello LLP, è vero il contrario. Questi non sono problemi che interessano codice completamente conformi agli standard, ma il codice viene spesso scritto con presupposti impliciti circa la larghezza di tipi interi.Si noti che un modello di programmazione è una scelta fatta per ogni singolo compilatore base, e diverse possono coesistere sullo stesso sistema operativo. Tuttavia, il modello di programmazione scelto come modello primario per l'API OS domina in genere.Un'altra considerazione è il modello di dati utilizzati per i conducenti . Piloti costituiscono la maggior parte del codice del sistema operativo dei sistemi operativi più moderni [ citazione necessaria ] (anche se molti non possono essere caricate quando il sistema operativo è in esecuzione). Molti piloti utilizzare i puntatori pesantemente per manipolare i dati, e in alcuni casi hanno per caricare puntatori di una certa dimensione in cui l'hardware di supporto per il DMA . A titolo di esempio, un driver per un dispositivo a 32 bit PCI chiedendo al dispositivo per dati DMA in aree superiori di memoria a 64-bit macchina non riusciva a soddisfare le richieste dal sistema operativo per caricare i dati dal dispositivo alla memoria al di sopra della barriera 4 gigabyte , perché i punti di riferimento per quegli indirizzi non entrava nei registri DMA del dispositivo. Questo problema è risolto avendo il sistema operativo prende le limitazioni di memoria del dispositivo in considerazione quando si generano le domande di driver per DMA, o utilizzando un IOMMU .