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/
