Windows XP Beta per AMD 64
In coincidenza del lancio di Athlon 64 da parte di AMD, Microsoft rilascia una release beta di Windows XP che supporta tale nuova tecnologia
di Fabio Boneschi pubblicata il 25 Settembre 2003, alle 13:48 nel canale ProgrammiAMDMicrosoftWindows










50 anni e non sentirli, SAS innova su IA, digital twin e quantum computing
Tesla Model 3 dopo 5 anni di utilizzo e 158.000km
DJI Mic Mini 2: audio 48 kHz / 24-bit e protocollo OsmoAudio sotto i 100 Euro
Motorola porta in Italia i nuovi Moto G37 e G37 Power: due nuove opzioni per la fascia bassa
Le 10 migliori offerte Amazon, ora: gli sconti improvvisi cambiano tutto sul podio, al 4 e 7 SSD e hard disk, gran ritorno al 5
Samsung Galaxy S26 Ultra a prezzo bomba su Amazon: fino a 251€ di sconto al checkout + coupon da 200€, è il prezzo più basso di sempre
Apple non realizzerà un iPad Ultra ed è colpa degli iPad Pro
4 accessori auto su Amazon che non sapevi di volere: aspiratore, compressore e CarPlay wireless fino al 40% di sconto
La Scopa elettrica da 48.000 Pa e 550W crolla a 88€ su Amazon: l'offerta con coupon che non ti aspetti
L'AI in azienda funziona, ma il MIT ha trovato cosa nessuno stava misurando
I 3 robot aspirapolvere più convenienti ora su Amazon: come i top di gamma ma a partire da 329€
14.000 MB/s su Amazon a 249€: il Lexar ARES PRO Gen5 da 2TB è l'SSD per le migliori prestazioni per PC Gaming e PS5
Un Galaxy Book con Android: Samsung crede in Aluminium OS e sta lavorando al progetto
5TB in tasca a soli 139€: l'Hard Disk portatile di Seagate crolla di prezzo su Amazon e ora costa solo 28€ al terabyte
realme 16 Pro+ 5G a prezzo shock su Amazon: batteria da 7000mAh, 200MP e IP69K a meno di 400€
Motorola Edge 70 Pro arriva in Italia: completo ma con un prezzo di listino impegnativo
Commodore 64 e ZX Spectrum come non li avete mai visti: per la prima volta in versione portatile









75 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infoComunque caso a parte sono gli applicativi che usano gli interi a 64 bit anche su macchine a 32 bit simulandoli con due interi a 32 bit... In quei casi il codice andrebbe riscritto (anche qui se fosse programmato bene basterebbe fare qualche piccola modifica, soprattutto se fatto in C++)...
Il compilatore Borland mi sembra avesse questa "feature"...non so se hanno "sistemato"...
Per Visual C++ c'è il tipo __int64 e per il GCC non mi ricordo...
Per chi usa questo tipo credo che non si debba fare alcun cambiamento...
Non vorrei dire cavolate, ma ora che ci penso anche i compilatori MS e il GCC hanno questa possibilità...
Per Visual C++ c'è il tipo __int64 e per il GCC non mi ricordo...
Per chi usa questo tipo credo che non si debba fare alcun cambiamento...
Sì ma mi riferifo al fatto che il Borland implementava gli interi a 64 bit con strutture (il Vc e gcc come un tipo primitivo), e le prestazioni erano decisamente inferiori rispetto altri compilatori.
Sono solo voci di corridoio non particolarmente attendibili cmq.
be' la migrazione di un codice non e' cosi' semplice...non e' che gli dici compila a 64bit e lui zack lo fa...lo devi anche scrivere il codice a 64bit altrimenti rischi (se mai fosse possibile tale procedura ma dubito) che un applicativo vada meno dello stesso a 32....IMHO
Dipende da com'è scritta l'applicazione, e se effettivamente ti serve gestire quantità intere a 64 bit...
Per il resto, l'A64 non è soltanto un'estensione a 64 bit, ma un'architettura praticamente nuova e una banale ricompilata permetterebbe di sfruttarla già abbastanza bene...
Già confermo. L'unico problema è il passaggio tra macchine big endian/little endian, ma non è questo il caso.
Questo è sempre gestito dal compilatore, quindi non c'è niente di cui preoccuparsi. Al più, se serve, è il programmatore che deve preoccuparsi di gestire l'endianess correttamente...
sizeof(long) == sizeof(void *) (4 byte su 32 bit / 8 byte su 64 bit)
ma la Microsoft ha scelto
sizeof(long) == sizeof(int) (4 byte)
Almeno è quanto ho saputo dai "bene informati"...
Se parliamo di standard, il C standard (ANSI, K&R, ma anche altre estensioni) non attribuisce alcuna "lunghezza" ad ogni tipo particolare: non puoi assumere che un long sia a 32 bit o 64 bit, perché tutto dipende da come è stato scritto il compilatore. In teoria un compilatore C per Commodore64 potrebbe anche assegnare 8 bit dal char al long, senza alcuna distinsione.
Quindi per quanto riguarda il discorso di cui parlavi, qualunque fosse la strada intrapresa, rimarrebbe comunque non discutibile (sono scelte che si fanno quando si affronta un progetto complesso come un compilatore).
Non è un caso se la prima cosa che fa un programmatore lungimirante è quella di scrivere un file include in cui definisce i tipi base che andrà ad utilizzare, specificando l'opportuno attributo (char, short, int, long, long long) a seconda della piattaforma (tramite compilazione condizionale).
E' vero...a questo non ci avevo pensato... Comunque i problemi si verificherebbero in casi non troppo frequenti...
Appunto. Vedi sopra: basta cambiare l'include principale e tutto torna alla normalità...
Bene o male è lo stesso meccanismo che viene utilizzato da ogni compilatore a 32 bit che offre il supporto al tipo intero a 64 bit. Ma non c'è di che preoccuparsi: l'importante è che il backend che genera l'eseguibile sia aggiornato per emettere il codice ottimizzato per l'archiettura a 64 bit. Roba da poco, comunque...
Sì ma mi riferifo al fatto che il Borland implementava gli interi a 64 bit con strutture (il Vc e gcc come un tipo primitivo), e le prestazioni erano decisamente inferiori rispetto altri compilatori.
Sono solo voci di corridoio non particolarmente attendibili cmq.
Non c'è differenza fra compilatore Borland, MS e GNU: le versioni a 32 bit di questi compilatori funzionano tutte allo stesso modo, impaccando due interi a 32 bit in una struttura. Quel che preme è che il generatore di codice venga sistemato per sfruttare appieno l'architettura Hammer, e non solo per il supporto nativo ai 64 bit.
Attualmente l'unica che "manca all'appello" è Borland, ma entro la fine dell'anno penso che vedremo arrivare Delphi 8, quindi manca poco, IMHO...
Questo è sempre gestito dal compilatore, quindi non c'è niente di cui preoccuparsi. Al più, se serve, è il programmatore che deve preoccuparsi di gestire l'endianess correttamente...
...appunto
Sapessi i programmi scritti con i piedi che ci sono in giro...
Quindi per quanto riguarda il discorso di cui parlavi, qualunque fosse la strada intrapresa, rimarrebbe comunque non discutibile (sono scelte che si fanno quando si affronta un progetto complesso come un compilatore).
La scelta sizeof(long) == sizeof(void *) non è stata presa a caso. Quando è stato discusso questo standard (l'altro è quello poi adottato dalla Microsoft) si pensava ad un "intero grande a sufficienza da poter contenere l'indirizzo di un puntatore". La Microsoft ha invece intrapreso lo standard che puntava a una perfetta corrisponenza del programma tra architetture distinte. Ambedue hanno un punto debole (nella prima, è scorretto usare i long "per fare i calcoli", se questi devono essere indipendenti dall'architettura; nella seconda, è scorretto usare long per manipolare gli indirizzi, in quanto è di dimensione insufficiente).
IMHO il primo standard è il più sensato, altrimenti non vedo che differenza debba esserci tra int e long
La scelta sizeof(long) == sizeof(void *) non è stata presa a caso. Quando è stato discusso questo standard (l'altro è quello poi adottato dalla Microsoft) si pensava ad un "intero grande a sufficienza da poter contenere l'indirizzo di un puntatore". La Microsoft ha invece intrapreso lo standard che puntava a una perfetta corrisponenza del programma tra architetture distinte. Ambedue hanno un punto debole (nella prima, è scorretto usare i long "per fare i calcoli", se questi devono essere indipendenti dall'architettura; nella seconda, è scorretto usare long per manipolare gli indirizzi, in quanto è di dimensione insufficiente).
IMHO il primo standard è il più sensato, altrimenti non vedo che differenza debba esserci tra int e long
Allora, premesso che di standard non si tratta, come ho già detto, perché le specifiche del linguaggio non entrano (giustamente) nel dettaglio implementativo, le due scelte, come hai riportato, hanno pregi e difetti. E' una cosa normale. La differenza fra int e long la dovremmo vedere adesso che si deve pensare alle soluzioni a 64 bit: per me è naturale "assegnarli" questa capacità. Mi spiego meglio.
Attualmente abbiamo:
char -> 8 bit
short -> 16 bit
int -> 32 bit
più o meno per tutti i sistemi (i più usati, comunque), mentre per l'implementazione dei long vale quanto hai già scritto. A questo punto una cosa saggia sarebbe porre:
long -> 64 bit
e utilizzare questo tipo di dati per manipolare sia dati che indirizzi (insomma: non mi piace la facilità con cui si scambiano interi e puntatori. :rolleyes
D'altra parte, se leggiamo le specifiche del linguaggio C, abbiamo soltanto che:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
per cui qualunque scelta implementativa ricade sempre e comunque nella piena capacità di ogni casa di poter decidere liberamente quali valori attribuire ad ogni tipo di dati, ma almeno a questo punto la presenza di un long avrebbe un senso, visto che con char/short/int andiamo a coprire già tutti i tipi di dati utilizzati nelle architetture fino a 32 bit...
Andando decisamente oltre, non capisco perché nei linguaggi non siano stati introdotti degli strumenti sintattici o dei tipi per specificare delle quantità "standard".
Ad esempio int[8] (nuova sintassi) o int8 (nuovo tipo, nessun cambiamento di sintassi) per specificare interi che possono contenere ALMENO 8 bit, e così via con int[16]/int16, int[32]/int32, int[64]/int64. A ciò aggiungerei un int[*]/intptr per specificare un intero che è in grado di contenere un puntatore in grado di indirizzare tutta la memoria, e delle funzioni standard per il "casting" fra interi e puntatori.
A mio avviso si guadagnerebbe molto più in portabilità e in leggibilità, invece di farcire gli include con una miriade di #ifdef/#define che ti fanno comunque rimanere con l'idea di non poter abbracciare qualunque architettura esistente (non puoi mica conoscere TUTTI i processori e i s.o.).
Mi sa che ho divagato un po' troppo, come al solito...
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".