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/


Raspunde prin e-mail lui