Poti sa-ti faci tu 2 functii mem_alloc si mem_free in care apelezi malloc/free si pastrezi intr-o lista pointerii pe care i-ai alocat si dimensiunea...alta metoda portabila nu cunosc.
Tim --- Be different. Think. On Wed, 15 Jan 2003, Dorin Lazar wrote: > Din cate shtiu eu nu exista, de aceea marea majoritate a limbajelor de > nivel inalt spun ca C-ul este o gresheala imensa. > Problema este ca daca tu aloci ceva memorie, ar trebui sa shi shtii > cata memorie aloci. > malloc-ul nu va aloca exact 1 octet pentru un apel malloc(1) - asta > pentru a evita fragmentarea memoriei. De aceea get_allocated_size ar > returna o valoare incorecta. > On Wednesday 15 January 2003 17:11, Mihnea-Costin Grigore wrote: > > Salve! > > > > Are cineva idee daca exista vreo functie in C (cat mai > > portabila!) care returneaza spatiul alocat pentru un pointer? Adica, > > ceva de genul: > > > > ... > > int *p = (int *) malloc (100 * sizeof(int)); > > ... > > n = get_allocated_size (p); /* => n == 400, daca sizeof(int) == 4 > > */ > > > > Impartind n la tipul pointer-ului, se poate afla numarul de > > elemente de tipul respectiv care sunt alocate incepand cu p, ceea ce > > este foarte util in anumite circumstante. > > > > Intreband pe ici pe colo si cautand pe google, am reusit sa > > determin urmatoare formula sapand prin malloc.c - din pacate este > > _extrem_ de neportabila si limitata la cazul glibc-2.x pe Linux: > > > > size_t n = *(size_t *)((char *)(p) - sizeof(size_t)); > > n = ((n & ~(0x1UL | 0x2UL)) - 2 * sizeof(size_t)); > > > > In libc-ul care vine cu MinGW32 (o versiune de acum cateva > > luni), chestia de mai sus nu merge, si trebuie facut asa: > > > > size_t n = *(size_t *)((char *)(p-2)); > > > > Ma gandeam ca ar trebui sa existe o functie pentru treaba asta, > > in fond free(); este portabila si face exact acest lucru (adica se > > uita in tabela de memorie alocata pentru fiecare "chunk" si ia de > > acolo valoarea). Daca free(); o face, o poate face orice functie, cu > > conditia sa aiba acces la datele interne din malloc.c (sau > > echivalent). > > > > Multumesc pentru orice sugestie... > > > > > > Numai bine, > > -- > Dorin "sp00ky" Lazar, programmer > Registered Linux user #162515 > > --- > Pentru dezabonare, trimiteti mail la > [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. > REGULI, arhive si alte informatii: http://www.lug.ro/mlist/ > > --- Pentru dezabonare, trimiteti mail la [EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'. REGULI, arhive si alte informatii: http://www.lug.ro/mlist/
