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,
--
Mihnea-Costin Grigore [ "Tenebus Ipsilo Ibinem Catehens" ]
E-mail: [EMAIL PROTECTED] Home Page: http://mgc8.virtualave.net
---
Pentru dezabonare, trimiteti mail la
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/