[ rivan @ 03.08.2003. 22:59 ] @
Da li neko zna (po mogucnosti portabilan nacin) da se proveri gde pokazuje neki pointer - da li je to stack, heap ili mozda adresa globalne promenljive, tj.
Code:

bool is_heap_ptr(void* ptr) {...}

int gp;

void main() {
    int x;
    char* z = new char[10];
    is_heap_ptr(&x);   // false
    is_heap_ptr(z+4);  // true
    is_heap_ptr(z+50); // true
    is_heap_ptr(&gp);  // false
}

Dakle nema potrebe da f-ja proverava da je to adresa alociranog bloka, samo da utvrdi da li je to adresa u okviru heapa ili ne (radi toga i za z+50 true)
[ filmil @ 04.08.2003. 12:08 ] @
Sumnjam da postoji prenosiv način jer heap ne mora da postoji na ciljnoj arhitekturi.

f
[ Preeky @ 04.08.2003. 18:00 ] @
sto se tice portabilnosti to je nemoguce u ovom slucaju.
da bi napisao tu funkciju moracesh da odredish pocetak i kraj heap-a shto je dosta teshnko i zavisi od sistema do sistema.


evo pogledaj ovaj link gde imash implementaciju f-je za stack i heap.

http://users.bestweb.net/~ctips/tip023.html





[ gandalf @ 04.08.2003. 22:10 ] @
Sta je to heap?? Definisano mesto od u memoriji za neku promenljivu ili... ?? I drugo gde se smestaju promenljive koje koji ma su dodljene vrednosti?? (stack heap) ili negde na neko trece mesto. E da kad sam vec kod toga kako se pristupa promenljivim koje se nalaze na stacku znaci moraju li da se sa stacka uzimaju po nekom redosledu ili ... ?
[ Dragi Tata @ 04.08.2003. 22:18 ] @
Nekje da može, što bi rekli Piroćanci. Win32 proces na primer može da ima više heap-ova.
[ Mikky @ 05.08.2003. 00:21 ] @
Citat:
gandalf:
Sta je to heap?? Definisano mesto od u memoriji za neku promenljivu ili... ??


Heap ti je otprilike memorija koju tvoj program ima na raspolaganju da koristi. Da bi je koristio mora prvo da je zatrazi od operativnog sistema (alocira), i kad zavrsi sa koriscenjem trebalo bi da je oslobodi, u protivnom dolazi do tkz. memory leak-ova.
Za C alociras memoriju mislim preko malloc() a oslobadjas preko free()
Za C++ imas new i delete reci.
Za win32 api imas GlobalAlloc(), HeapAlloc(), VirtuallAlloc() i njima korespondendske funkcije za oslobadjanje.

Citat:

I drugo gde se smestaju promenljive koje koji ma su dodljene vrednosti?? (stack heap) ili negde na neko trece mesto.

Ako mislis na promenljive koje su inicijalizovane na samom pocetku programa, npr
int a=5;
ili
char asd[]="whuzaaaaaaa";

One su smestene u samom izvrsnom fajlu, gde tacno to zavisi od izvrsnog fajla i njegove strukture, za win32 PE fajlove to je negde u data sekciji

Citat:

E da kad sam vec kod toga kako se pristupa promenljivim koje se nalaze na stacku znaci moraju li da se sa stacka uzimaju po nekom redosledu ili ... ?

Promenljivim na stacku se pristupa preko da kazem "dinamicki", znaci to nisu tacno odredjene i u napred poznate lokacije kao npr kod inicijalizovanih promenljivih, ili globalnih promenljivih.Ako te bas zanima detaljno kako onda moras malo znati kako kompajleri generisu asm kod, sta je stack frame itd...

[ gandalf @ 05.08.2003. 02:33 ] @
Znaci heap je mesto u memoriji koje je rezervisano za nas program! E u okviru heapa se nalaze segmenti.
[ rivan @ 05.08.2003. 10:42 ] @
Ovo resenje sa sbrk() nije najportabilnije ni medju UNIXima, a o tome da u Win i ne postoji odgovarajuca f-ja da i ne govorim, ali sa druge strane vrlo je brzo, a to je ono sto mi je trebalo

Sto se Win tice, ako je tesko proveriti da nesto pokazuje na heap mozda je lakse proveriti da ne pokazuje na stack (ovo jeste lako proveriti) ili da nije globalna promenljiva (ne znam kako to da proverim)?