Domanda

Quali considerazioni devo fare se voglio che il mio codice per eseguire correttamente su entrambi i 32bit e 64bit piattaforme ?

EDIT:Che tipo di aree, ho bisogno di prendersi cura, ad esempio, inla stampa di stringhe di caratteri o utilizzando strutture ?

È stato utile?

Soluzione

Opzioni:

Il codice in una lingua con un Macchina Virtuale (come Java)

Codice in .NET e non target specifici di architettura.Il .NET compilatore JIT verrà compilato per voi a destra architettura prima della sua esecuzione.

Altri suggerimenti

Una soluzione potrebbe essere bersaglio di un ambiente virtuale che gira su entrambe le piattaforme (sto pensando Java o .Net qui).

O scegliere un linguaggio interpretato.

Avete altri requisiti, come il richiamo di codice esistente o librerie?

Le stesse cose che avrebbero dovuto fare tutti insieme per garantire scrivere codice portabile :)

mozilla linee guida e il C faq sono buoni punti di partenza

Presumo che tu stia ancora parlando la compilazione separatamente per ogni singola piattaforma?Come in esecuzione su entrambi è completamente fattibile semplicemente creando un 32bit binario.

La più grande è di fare attenzione a non mettere i puntatori a 32-bit posizioni di archiviazione.

Ma non c'è adeguata 'indipendente dalla lingua' rispondere a questa domanda, davvero.Non si riusciva nemmeno a ottenere una particolare risposta ferma se si ristretto a voi stessi di qualcosa come standard, 'C' o 'C++' - la dimensione di archiviazione dei dati, puntatori, ecc, è tutto terribilmente attuazione a carico.

Onestamente dipende dalla lingua, perché gestito linguaggi come C# e Java o linguaggi di Scripting come JavaScript, Python, PHP o sono bloccati nella loro attuale metodologia e iniziare a fare qualcosa al di là di avanzata roba non c'è molto di cui preoccuparsi.

Ma la mia ipotesi è che si stanno chiedendo linguaggi come il C++, C, e altri di livello inferiore lingue.

La più grande cosa che si deve preoccupare è la dimensione delle cose, perché nella versione a 32-bit mondo si sono limitati alla potenza di 2^32 tuttavia nella versione a 64-bit mondo le cose si fanno più grandi di 2^64.

Con 64 bit si dispone di uno spazio più grande per la memoria e archiviazione in RAM, e permette di calcolare i numeri più grandi.Tuttavia, se si sa che si sta compilando per entrambe le versioni a 32 e 64, è necessario assicurarsi di limitare le vostre aspettative di sistema per la versione a 32-bit mondo e i limiti del buffer e numeri.

In C (e forse C++) ricordatevi sempre di usare l'operatore sizeof quando il calcolo delle dimensioni di buffer per la malloc.In questo modo potrai scrivere più codice portabile in ogni caso, e questo verrà automaticamente 64bit tipi di dati in considerazione.

Nella maggior parte dei casi, l'unica cosa che devi fare è compilare il codice per entrambe le piattaforme.(E supponendo che si sta utilizzando un linguaggio compilato;se non lo è, allora probabilmente non c'è bisogno di preoccuparsi di nulla).

L'unica cosa che posso pensare che potrebbe causare problemi, sta assumendo le dimensioni di tipi di dati, che è qualcosa che probabilmente non dovrebbe fare comunque.E, naturalmente, tutto quello che viene scritto in assembly sta andando a causare problemi.

Tenete a mente che molti compilatori di scegliere la dimensione dell'intero basato su architettura sottostante, dato che il "int" dovrebbe essere il più veloce numero manipolatore nel sistema (secondo alcune teorie).

Questo è il motivo per cui così tanti programmatori uso di typedef per loro più programmi portatili - se vuoi che il tuo codice funziona su tutto, da 8 bit, processori a 64 bit dei processori è necessario riconoscere che, in C comunque, int non è rigidamente definito.

I puntatori sono un'altra area di attenzione - non utilizzare un lungo, lungo o lungo, o qualsiasi tipo specifico se sei armeggiare con il valore numerico del puntatore - uso di un costrutto, che, purtroppo, varia da compilatore a compilatore (che è il motivo per cui si dispone di un separato typedef.h file per ogni compilatore in uso).

-Adam Davis

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top