Estoy usando valgrind para verificar la asignación de almacenamiento dinámico de la herramienta de archivo/compresión p7zip (7zip en Windows) en Linux. Descargué el código de aquí ( https://sourceforge.net/projects/p7zip/files/p7zip/ ) y lo compilé (make all_test) y luego lo instalé (./install.sh).
Después de la instalación, se crea un script de shell llamado '7Za' en /usr/local/bin y su contenido se lee como:
#! /bin/sh "/usr/local/lib/p7zip/7za" "$@"Además, en la ruta especificada /usr/local/lib/p7zip/7za se coloca el ejecutable de 7za.
Ahora, si ejecuto valgrind para probar el uso de memoria de 7za (que básicamente ejecuta el script de shell) usando este comando, obtengo solo 2 KB de uso de almacenamiento dinámico.
valgrind 7za x file.7zMientras que, si uso directamente el binario 7za, obtengo un alto uso de memoria de alrededor de 1 MB, que también parece real:
valgrind /usr/local/lib/p7zip/7za x /home/z/Desktop/file.7zDe manera similar, cuando construyo el código, se crea un directorio bin que contiene el ejecutable 7za. Si lo ejecuto desde allí, nuevamente obtengo un uso de memoria alto y correcto.
Estoy tratando de entender cuál es la diferencia en ambos enfoques. Por qué usar la aplicación instalada (ejecutar a través de la secuencia de comandos) no proporciona un uso correcto de la memoria.
Se supone que valgrind depura los problemas relacionados con la memoria para los ejecutables ELF de 64 bits o ELF de 32 bits. No se puede usar con scripts de shell. Por lo tanto, no podrá depurar su aplicación utilizando el script de shell.