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/


Raspunde prin e-mail lui