Penso che dovrei ottenere 8 quando uso IntPtr.Size. Tuttavia ho ancora 4 su macchina x64 con Widnows 7 x64, perché?perché IntPtr.size è 4 su Windows x64?
risposta
controllare l'architettura della CPU del file, è x86? Dovrebbe essere CPU any/64bit
Il sistema operativo a 64 bit implementa un ambiente emulato noto come WOW64 che emula l'ambiente Windows a 32 bit. Stai creando il tuo programma di targeting x86, cioè 32 bit. Ciò significa che il processo viene eseguito sotto l'emulatore come un processo a 32 bit e, naturalmente, i puntatori sono larghi 4 byte.
Se si modificano le opzioni di indirizzare x64 o AnyCPU allora la dimensione del puntatore sarà di 8 byte quando il processo viene eseguito su un sistema a 64 bit.
Controllare il target di costruzione: x86/x64 o qualsiasi CPU Se la configurazione è x86 o qualsiasi CPU, quindi, l'intptr è 4 forse.
Altro suggerimento:
Se non avete requisito per eseguire il programma in modalità x64, si prega di donn't modificare la destinazione build per x64 perché la modalità x64 ha effetti negativi sia su prestazioni e l'utilizzo dello spazio. Ho dimenticato il collegamento dell'articolo originale su MSDN, ma il motivo principale è l'aumento delle dimensioni di ptr e del carico del GC, è possibile cercare quell'articolo.
Oltre alle risposte di cui sopra, anche se è stata selezionata qualsiasi architettura di CPU, VS2013 ha una nuova opzione nelle proprietà progetto denominato "Preferisco a 32 bit". È necessario disattivarlo su macchine di sviluppo a 64 bit per ottenere IntPtr.Size = 8.
Si sta compilando l'applicazione come x86 (Proprietà> Crea> Target piattaforma) anziché x64? – Rob
Vedi qui: http://stackoverflow.com/questions/399003/è-il-sizeofsome-pointer-always-equal-to-four – htmldrum