2012-06-09 15 views
11

¿Cómo se puede decir, dado un puntero void *, cuál es el tamaño de un bloque asignado en esta dirección dada (previamente asignada usando malloc, en Linux y Windows)? Espero que ambos sistemas seguramente almacenen este tipo de información en alguna parte. Es decir, una alternativa de malloc_size que existe en OSX/Darwin. Usando gcc/mingw si ayuda.alternativa malloc_size en Linux y Windows

+0

Creo que el tamaño se almacena junto con otras materias en algún tipo de estructura justo antes dado el puntero para ti por malloc. Si no, puede ser un puntero a dicha estructura, ya que 'free()' necesitará esos datos. – nhahtdh

+0

@nhahtdh Sí, también lo espero, pero lo necesito con precisión. – Cartesius00

+0

@James, ¿qué harás si ejecuto tu aplicación con mi asignador personalizado en Linux? Me gusta 'LD_PRELOAD = my_super_allocator.so./Your_app'? Me refiero a si piensas que hay una estructura predefinida detrás de 'void *'. –

Respuesta

12

En Windows, las cosas que utilizan el MS CRT puede utilizar _msize, en Linux podría intentar malloc_usable_size ...

+0

Ver también: http://blogs.msdn.com/b/oldnewthing/archive/2012/03/16/10283988.aspx – Anders

Cuestiones relacionadas