Barninga Z
a- a+

I puntatori C: complicazioni e problemi

PUNTATORI 

Complicazioni 

I puntatori sono, dunque, strumenti appropriati allamanipolazione ad alto livello degli indirizzi dellevariabili. C'è proprio bisogno di preoccuparsi deiregistri della CPU e di tutte le contorsioni possibili traindirizzi seg:off e indirizzi lineari? Eh, sì... unpoco è necessario; ora si tratta di capire ilperché. 

Poco fa abbiamo ipotizzato che l'indirizzo dinumero e di numPtr fossero,rispettivamente, FFE6 e FFE4. A prescinderedai valori, realisitci ma puramente ipotetici, èinteressante notare che si tratta di due unsignedint. In effetti, per visualizzarli correttamente,abbiamo passato a printf() stringhe contenenti%X, lo specificatore di formato per gli interi informato esadecimale. Che significa tuttociò? 

Significa che il valore memorizzato in numPtr (ein  qualsiasi altro puntatore[11]) è una word,occupa 16 bit e si differenzia da un generico intero senzasegno per il solo fatto che esprime un indirizzo di memoria.E' evidente, alla luce di quanto appena affermato, chel'indirizzo memorizzato in numPtr è unoffset: come tutti i valori a 16 bit esso è gestitodalla CPU in uno dei suoi registri e può variare tra 0e 65535. Un puntatore come numPtr esprime allora, inbyte, la distanza di una variabile da... che cosa?Dall'indirizzo contenuto in un altro registro della CPU,gestito automaticamente dal compilatore. 

Con qualche semplificazione possiamo dire che ilcompilatore, durante la traduzione del sorgente in linguaggiomacchina, stabilisce quanto spazio il programma ha adisposizione per gestire i propri dati e a quale distanzadall'inizio del codice eseguibile deve avere iniziol'area riservata ai dati. Dette informazioni sonomemorizzate in una tabella, collocata in testa al fileeseguibile, che il sistema operativo utilizza per caricarel'opportuno valore in un apposito registro della CPU.Questo registro contiene la parte segmento dell'indirizzoespresso da ogni puntatore dichiarato comenumPtr

Nella maggior parte dei casi l'esistenza dei registri disegmento è del tutto trasparente al programmatore, ilquale non ha alcun bisogno di proccuparsene, in quantocompilatore, linker e sistema operativo svolgonoautomaticamente tutte le operazioni necessarie alla lorogestione. Nello scrivere un programma è di solitosufficiente lavorare con i puntatori proprio come abbiamovisto negli esempi che coinvolgono numero enumPtr: gli operatori "*" e"&" sono caratterizzati da unanotevole potenza operativa. 

 



Ti potrebbe interessare anche

commenta la notizia