2012-06-09 12 views
11

Come si può dire, dato un puntatore void *, qual è la dimensione di un blocco allocato su questo dato indirizzo (precedentemente allocato utilizzando malloc, in Linux e Windows)? Spero che entrambi i sistemi memorizzino questo tipo di informazioni da qualche parte. Cioè, alternativa di malloc_size che esiste su OSX/Darwin. Usare gcc/mingw se aiuta.malloc_size alternativa su Linux e Windows

+0

Penso che la dimensione viene memorizzato insieme ad altri animali in una sorta di struct giusto prima che il puntatore dato a te da malloc. In caso contrario, potrebbe essere un puntatore a tale struttura, dal momento che 'free()' avrà bisogno di tali dati. – nhahtdh

+0

@nhahtdh Sì, lo spero anche io, ma ne ho bisogno proprio. – Cartesius00

+0

@James, cosa farai se lancio la tua applicazione con il mio allocatore personalizzato su Linux? Mi piace 'LD_PRELOAD = my_super_allocator.so./Your_app'? Voglio dire se penserai che c'è una struttura predeterminata dietro "void *". –

risposta

12

In Windows, le cose che utilizzano il MS CRT può utilizzare _msize, su Linux si potrebbe provare malloc_usable_size ...

+0

Vedi anche: http://blogs.msdn.com/b/oldnewthing/archive/2012/03/16/10283988.aspx – Anders

Problemi correlati