PDA

Visualizza la versione completa : [c]gestione memoria


matrics21
16-07-2003, 17:59
Parlando di memorie, qual è la differenza tra segmento e offset?
Cosa sono i puntatori far e huge?
Se ho una variabile di tipo long,posso dichiarare un puntatore in questo modo:

int *punt;

o sono obbligato a dichiararlo così:

long *punt;

matrics21
16-07-2003, 18:49
:sonno:

matrics21
16-07-2003, 21:41
:cry:

r0x
17-07-2003, 00:56
Il concetto di puntatore far/huge con segmento/offset puoi anche sotterrarlo. :D Si usava ai tempi del DOS, ora questi problemi non esistono piu'.

ChReAn
17-07-2003, 10:19
long *punt;

Se scrivi

int *punt;

il compilatore lo considera un puntatore a int.

matrics21
17-07-2003, 10:32
Originariamente inviato da ChReAn
long *punt;

Se scrivi

int *punt;

il compilatore lo considera un puntatore a int.

ma se poi vado a puntare una variabile long mi da errore?

ChReAn
17-07-2003, 12:45
Originariamente inviato da matrics21
ma se poi vado a puntare una variabile long mi da errore?

Ehm... Mi sa che non ci siamo capiti.
Se devi puntare a un long, dichiara il puntatore long.
Se punti a un int, dichiara un puntatore int.
Il compilatore non ti dà errore ma solo un warning: stai però molto attento al matching dei tipi di dati fra puntatore e dato puntato se vuoi evitarti spiacevoli inconvenienti.

Ad esempio questo codice:



int i;
long *punt;
i = 3;
punt = &i;

printf ("%d\n", *punt);


Compila con un solo warning con gcc, e se eseguito sembra funzionare, ma eviterei come la peste errori simili.

matrics21
17-07-2003, 12:54
Ok,grazie
Per quanto riguarda la memoria invece?

Tigre851
17-07-2003, 13:57
Ciao,
Il segmento è un' area di memoria riservata ad un processo; mentre un offset è una differenza... tra cosa?

offset =posiz_attuale - indirizzo_iniziale

es

se il segmento di memoria inizia in 0010h
e tu sei in 0015h all' ora l' offset è

0010h-0015h=0005h

Ciao

matrics21
17-07-2003, 14:32
Grazie:ciauz:

Loading