2012-09-21 7 views
5

Escribo mi proyecto por c con opencv. Quiero información de impresión sobre memoria asignada o memoria utilizada por mi programa. ¿Hay alguna función que me brinde información sobre la memoria? Finalmente estoy usando Qt para Linux y Windows,¿Cómo puedo obtener el tamaño de memoria asignado por mi programa?

Gracias de antemano.

+0

Este hilo anterior tiene algunas ideas http://stackoverflow.com/questions/6192531/best-strategy-for-profiling-memory-usage-of-my-code-open-source-and-3rd-party – Ari

Respuesta

4

Puede escribir envoltorios en malloc y free que rastrean la cantidad de memoria que está utilizando.

EDITAR: Si también desea interceptar llamadas a malloc y gratuitas en bibliotecas externas, deberá definirlas en una biblioteca compartida y cargarlas antes de libc. Cómo lo haces depende de tu sistema operativo.

+0

si carga una biblioteca y usa el 'malloc' desenvuelto, ¿esa memoria es utilizada por su programa o no? –

+0

podría darme un ejemplo sobre malloc como envoltorio y gratis. – Aym

+0

@RemusRusanu es absolutamente posible de hecho. Uno puede llamar directamente a las funciones de reserva de memoria del sistema operativo. como 'sbrk' (aunque no recomendada porque interfiere con algunas implementaciones malloc). 'memmap' que es usado por los mallocs modernos, y proporciona fragmentos aislados de mem. 'VirtualAlloc' en Win32, mismo concepto. O las cosas 'NTHeap' también. –

4

En Linux se mira en your own process info pseudo-file:

/proc/[pid]/statm 
Provides information about memory usage, measured in pages. The columns are: 
size  total program size 
      (same as VmSize in /proc/[pid]/status) 
resident resident set size 
      (same as VmRSS in /proc/[pid]/status) 
share  shared pages (from shared mappings) 
text  text (code) 
lib  library (unused in Linux 2.6) 
data  data + stack 
dt   dirty pages (unused in Linux 2.6) 

En Windows nos fijamos en que el propio proceso Process Object contadores de rendimiento:

Private Bytes muestra el número actual de bytes que este proceso ha asignado que no se puede ser compartido con otros procesos.

-1

También puede realizar algún nivel de análisis de memoria del segmento Código/Datos durante el tiempo de compilación si selecciona el archivo elf, dump o map. Y las opciones de línea de comando de GCC para el uso de la pila son: -flash-use y -fcallgraph-info.

+0

-1 Estoy bastante seguro de que el OP está pidiendo la memoria asignada en tiempo de ejecución. – quantum

Cuestiones relacionadas