2012-06-09 12 views
11

Jak można stwierdzić, biorąc pod uwagę wskaźnik void *, jaki jest rozmiar bloku przydzielonego na podany adres (wcześniej przydzielony przy użyciu malloc; w systemach Linux i Windows)? Mam nadzieję, że oba systemy z pewnością przechowują gdzieś tego rodzaju informacje. To jest alternatywa dla malloc_size, która istnieje na OSX/Darwin. Używanie gcc/mingw, jeśli to pomaga.alternatywa malloc_size w systemach Linux i Windows

+0

myślę, że rozmiar jest przechowywany wraz z innymi spożywczych w jakiejś struktury tylko tuż przed podanych wskaźnik do ciebie przez malloc. Jeśli nie, może to być wskaźnik do takiej struktury, ponieważ 'free()' będzie potrzebował takich danych. – nhahtdh

+0

@nhahtdh Tak, również mam taką nadzieję, ale potrzebuję tego dokładnie. – Cartesius00

+0

@James, co zrobisz, jeśli uruchomię aplikację przy użyciu mojego niestandardowego programu przydzielającego w systemie Linux? Podobnie jak 'LD_PRELOAD = my_super_allocator.so./Your_app'? Chodzi mi o to, jeśli pomyślisz, że istnieje predysponowana struktura za 'void *'. –

Odpowiedz

12

W Windows, rzeczy, które używają MS CRT mogą korzystać _msize, w systemie Linux można spróbować malloc_usable_size ...

+0

Zobacz także: http://blogs.msdn.com/b/oldnewthing/archive/2012/03/16/10283988.aspx – Anders

Powiązane problemy