n° 185
Maggio/Giugno 2013
Maggio 20, 2013, 07:33:18 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: "short" e "int" su Windows a 64 bit  (Letto 1104 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
escotobar
Newbie
*

Karma: +0/-2
Scollegato Scollegato

Messaggi: 44


Mostra profilo E-mail
« inserita:: Luglio 28, 2012, 04:54:21 pm »

Sulle versioni di Windows a 32 bit uno "short" e' lungo 16 bit e un "int" 32 bit, sulle versioni di Windows a 64 bit e' lo stesso?
A essere a 64 bit sono i registri puntatore?
I tipi "short" e "int" sono sempre 16 e 32 bit?
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2705


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #1 inserita:: Luglio 28, 2012, 04:59:29 pm »

La risposta a tutte e tre le domande è "NO". Seguito da un bel "dipende dal compilatore", ovviamente (e dagli switch di compilazione in particolare). Inizia col leggere questo.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
escotobar
Newbie
*

Karma: +0/-2
Scollegato Scollegato

Messaggi: 44


Mostra profilo E-mail
« Risposta #2 inserita:: Luglio 28, 2012, 06:54:44 pm »

Ho fatto un controllo del C++ Builder 3, come keyword sono supportate "__int8","__int16","__int32" e "__int64"

Ho usato l'operatore "sizeof", e risulta che il tipo "short int" e' lungo 2 byte, e il tipo "int" 4 byte.

Come gia' scritto ho compilato il programma sotto Windows a 32 bit, il programma funziona anche (senza ricompilare) sotto Windows a 64 bit?

Non e' che sotto Windows a 64 bit il tipo "short int" e' lungo 4 byte e il tipo "int" 8 byte?

Come scritto nel programma uso "short int" e "int", il tipo "short int" equivale SEMPRE (per Win32 e Win64) a "__int16" e il tipo "int" corrisponde SEMPRE a "__int32" ?

In un punto del programma faccio entrare DUE "short int" in un "int"
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2705


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #3 inserita:: Luglio 28, 2012, 07:56:52 pm »

Come gia' scritto ho compilato il programma sotto Windows a 32 bit, il programma funziona anche (senza ricompilare) sotto Windows a 64 bit?

Senza ricompilazione, la dimensione dei tipi gestita dal codice binario è assolutamente invariante. La retrocompatibilità del codice legacy è quasi sempre assicurata, specialmente nel passaggio 32->64 bit. Se si vogliono evitare molte sorprese, si usino a piene mani struct e union con campi di bit, che se usate adeguatamente garantiscono in molti casi l'ampiezza in bit perfino in codice destinato a compilatori e target del tutto eterogenei.


PS: BCB3 genera unicamente codice a 32 bit, quale che sia il sistema target prescelto nella famiglia NT.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
escotobar
Newbie
*

Karma: +0/-2
Scollegato Scollegato

Messaggi: 44


Mostra profilo E-mail
« Risposta #4 inserita:: Luglio 28, 2012, 09:54:56 pm »

Per leggere da file un "int" uso la seguente union

union {char c[4]; int i;} U;

e poi la seguente istruzione

fread(U.c,1,4,FileDati);

se il tipo "int" NON è lungo esattamente 4 byte leggo un numero SBAGLIATO!

Inoltre come vi ho gia' detto in un punto del programma faccio entrare due "short int" in un "int".

Comunque a quanto ho capito posso compilare col C++ Builder 3 sotto Windows XP il mio programma e poi posso venderlo SICURO che il programma funzionera' (senza ricompilazione) correttamente ANCHE su TUTTE le versioni di Windows a 64 bit, e' cosi?
Registrato
celeborn85
Global Moderator
Hero Member
*****

Karma: +57/-11
Scollegato Scollegato

Messaggi: 2116


Mostra profilo
« Risposta #5 inserita:: Luglio 28, 2012, 11:00:34 pm »

Non hai certamente bisogno di una union per leggere un int con una fread.. Il seguente codice è sufficiente:
fread(&n, sizeof(n), 1, FileDati);
Ma alla fine, se la dimensione è importante, meglio usare int32_t o __int32 o simili..
Registrato

I moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
escotobar
Newbie
*

Karma: +0/-2
Scollegato Scollegato

Messaggi: 44


Mostra profilo E-mail
« Risposta #6 inserita:: Luglio 29, 2012, 02:58:41 pm »

Vorrei sapere da M.A.W. 1968 o da qualcuno altrettanto competente la seguente cosa:

posso compilare i miei programmi con il C++ Builder 3 sotto Windows XP a 32 bit e poi vendere i programmi SICURO che i programmi funzioneranno ANCHE su tutte le versioni di Windows a 64 bit?
Registrato
celeborn85
Global Moderator
Hero Member
*****

Karma: +57/-11
Scollegato Scollegato

Messaggi: 2116


Mostra profilo
« Risposta #7 inserita:: Luglio 29, 2012, 03:06:34 pm »

Sì. L'architettura amd64 era stata pensata per essere retrocompatibile ed è in grado di eseguire senza problemi applicazioni a 32 bit. In effetti, credo che la maggior parte dei programmi che ho sul mio pc (che ha installato Windows 7 64bit) sono a 32 bit.
Registrato

I moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.
escotobar
Newbie
*

Karma: +0/-2
Scollegato Scollegato

Messaggi: 44


Mostra profilo E-mail
« Risposta #8 inserita:: Luglio 29, 2012, 03:19:07 pm »

Lo stesso discorso e' valido anche per chi invece di AMD a una CPU Intel?
Sei SICURO?
Registrato
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2705


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #9 inserita:: Luglio 29, 2012, 03:40:22 pm »

L'unica "certezza" è che l'informatica applicativa è una scienza sperimentale, con tutti i suoi pro e contro. Un pro è sicuramente quello che chiunque può replicare gli esperimenti e che la risposta a quasi ogni domanda può essere ricavata in locale dal vostro computerino.

Dunque non resta che dotarsi di un paio di piattaforme hardware, varie licenze di SO (meglio su macchina virtuale come VMWare) ed effettuare tutti i test del caso, come fin dagli albori della disciplina softwarehouse di ogni dimensione e singoli sviluppatori hanno sempre fatto per condurre test di compatibilità dei propri applicativi.

Sviluppare software funzionante è (anche, e soprattutto) un'attività ingegneristica: come in tutti gli altri rami di questa disciplina gran parte delle "certezze" di dettaglio derivanti dal calcolo e dalla teoria acquistano il giusto valore aletico solo e unicamente quando asseverate sperimentalmente (il che, per inciso, non è attività a costo nullo, anche se nelle ultime tre decadi i costi si sono abbattuti con velocità esponenziale).
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page