Resolvemos el misterio planteado en clases anteriores respecto a los 71K que se reservan con un programa vacío en
#C++. Repasamos cuál es el origen del misterio y desgranamos paso a paso como entender lo que está sucediendo exactamente.
Contenidos detallados:
- Pista: un programa vacío compilado en C no hace ninguna reserva, mientras que compilado en C++ reserva 71K sin que se lo pidamos.
- Viendo que es el formato ELF (Executable-Linkable-Format)
- Como usar ldd para ver las librerías de enlace dinámico que debe cargar un ejecutable
- Diferencia entre librerías enlazadas compilando con gcc y con g++
- Los 71K reservados por #valgrind son un #memory-leak auténtico
- Usando el man de valgrind para entender el origen del memory-leak
- cxx-freeres: función específica creada para liberar recursos que de otra forma serían un leak y que es llamada por valgrind
- Trazando el origen del memory-leak con valgrind, pidiendo que analice el leak en lugar de enmascararlo
- Entendiendo la función static_initialization_and_destruction_0: inicialización de los datos estáticos de programa antes de lanzar main
- Entendiendo que hay código que se ejecuta antes de que nuestros programas comiencen
- Analizando el fichero eh_alloc.cc y encontrando el origen de la reserva de los 71K
- La reserva es un pool de memoria para alojamiento de excepciones en caso de que no quede memoria cuando se produce la excepción
- Entendiendo las implicaciones del código que se ejecuta antes de main
- Casos claros en que puede suceder que se produzca una excepción y no quede espacio en el HEAP para almacenarla
- Analizando la función freeres y el operador de ámbito global para llamar a free
- Motivos por los que los desarrolladores han producido el leak
- Puntos importantes de este ejercicio de investigación y qué hemos aprendido
- Entendiendo quién es _dl_init y para que sirve
- Analizando un comentario específico muy interesante de un desarrollador de _dl_init y la carga de objetos y librerías dinámicas
Contenidos detallados:
- Pista: un programa vacío compilado en C no hace ninguna reserva, mientras que compilado en C++ reserva 71K sin que se lo pidamos.
- Viendo que es el formato ELF (Executable-Linkable-Format)
- Como usar ldd para ver las librerías de enlace dinámico que debe cargar un ejecutable
- Diferencia entre librerías enlazadas compilando con gcc y con g++
- Los 71K reservados por #valgrind son un #memory-leak auténtico
- Usando el man de valgrind para entender el origen del memory-leak
- cxx-freeres: función específica creada para liberar recursos que de otra forma serían un leak y que es llamada por valgrind
- Trazando el origen del memory-leak con valgrind, pidiendo que analice el leak en lugar de enmascararlo
- Entendiendo la función static_initialization_and_destruction_0: inicialización de los datos estáticos de programa antes de lanzar main
- Entendiendo que hay código que se ejecuta antes de que nuestros programas comiencen
- Analizando el fichero eh_alloc.cc y encontrando el origen de la reserva de los 71K
- La reserva es un pool de memoria para alojamiento de excepciones en caso de que no quede memoria cuando se produce la excepción
- Entendiendo las implicaciones del código que se ejecuta antes de main
- Casos claros en que puede suceder que se produzca una excepción y no quede espacio en el HEAP para almacenarla
- Analizando la función freeres y el operador de ámbito global para llamar a free
- Motivos por los que los desarrolladores han producido el leak
- Puntos importantes de este ejercicio de investigación y qué hemos aprendido
- Entendiendo quién es _dl_init y para que sirve
- Analizando un comentario específico muy interesante de un desarrollador de _dl_init y la carga de objetos y librerías dinámicas
C++ : ¿Por qué reserva 71K un programa vacío? mega drive novo | |
58 Likes | 58 Dislikes |
607 views views | 2.28K followers |
Science & Technology Creative Commons Attribution licence (reuse allowed) | Upload TimePublished on 27 Jul 2019 |
Không có nhận xét nào:
Đăng nhận xét