|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Apr 2004
Messaggi: 75
|
domanda su malloc
quando un programma scritto in c viene caricato in memoria ed eseguito,il suo spazio di indirizzamento è diviso in 4 aree,scendendo dalle zone di memoria più alte a quelle più basse:
codice dati statici stack heap la funzione malloc alloca regioni di memoria dall'heap ma come fa a sapere dove inizia e finishe l'heap? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
molto semplice.... i registi di segmento al momento che chiami la malloc anno come valore il segmento corrente...
Attento però la definizione che ti sto dando è un pò diversa con gestione di memoria protetta.. perchè le informazioni dentro i registri segmento non puntano direttamente all'area di memoria ma ad una tabella di indirizzamento.... però prendi per buona la prima perchè in fin dei conti con la memoria protetta si fa qualche giro e salto in più ma poi si va a finire sempre allo stesso punto... Ciao.. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
C'è un ulteriore layer di astrazione, che si interfaccia con le primitive di allocazione del sistema operativo.
nb lo stack in genere risiede nella regione più alta, e si espande verso il basso.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#4 |
|
Registered User
Iscritto dal: Apr 2004
Messaggi: 75
|
ah già,probabilmente il codice di malloc che risiede nelle librerie statiche standard chiama la funzione del SO per allocare memoria,ad esempio VirtualAlloc sotto Win32
e VirtualAlloc sa dove finisce e inizia l'heap perchè a caricare il programma è stato windows stesso,ovvio |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:07.



















