Programas de vazamento de memória

Um vazamento de memória é um erro de programa que consiste em alocar repetidamente a memória, usando-a e, em seguida, negligenciando para liberá-la.

Um vazamento de memória em um programa de longa duração, como um aplicativo interativo, é um problema grave, pois pode resultar em fragmentação de memória e no acúmulo de grandes números de páginas de maioria de garbagas em memória real e espaço de página. Os sistemas têm sido conhecidos por ficar sem espaço de página por causa de um vazamento de memória em um único programa.

Um vazamento de memória pode ser detectado com o comando svmon , procurando por processos cujo segmento de trabalho cresce continuamente. Um vazamento em um segmento de kernel pode ser causado por um vazamento de mbuf ou por um driver de dispositivo, extensão do kernel ou até mesmo o kernel. Para determinar se um segmento está crescendo, use o comando svmon com a opção -i para olhar um processo ou um grupo de processos e ver se algum segmento continua a crescer.

Identificar a subroutina ofensivo ou linha de código é mais difícil, especialmente em aplicativos AIXwindows, que geram grandes números de chamadas malloc () e free () . C++ fornece um Depurador do HeapView para analisar / ajustar o uso de memória e fugas. Alguns programas de terceiros existem para análise de vazamentos de memória, mas eles requerem acesso ao código-fonte do programa.

Alguns usos da subroutine realloc () , enquanto não realmente erros de programação, podem ter o mesmo efeito que um vazamento de memória. Se um programa frequentemente usa a subroutine realloc () para aumentar o tamanho de uma área de dados, o segmento de trabalho do processo pode se tornar cada vez mais fragmentado se o armazenamento liberado pela subroutine realloc () não puder ser reutilizado para qualquer outra coisa.

Use a chamada de sistema disclamar () e free () para liberar memória que não é mais necessária. A chamada do sistema disclamar () deve ser chamada antes da chamada free () . Ele desperdiça tempo de CPU para liberar memória após a última chamada malloc () , se o programa terminará em breve. Quando o programa é finalizado, seu segmento de trabalho é destruído e os quadros de página de memória real que continam dados do segmento de trabalho são adicionados à lista gratuita. O exemplo a seguir é um programa de vazamento de memória onde oInuse,PgspaceeAddress Rangeos valores do segmento de trabalho privado estão continuamente crescendo:
# svmon -P 13548 -i 1 3
  Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage
13548                          pacman         8535        2178      847     8533      N     N     N

Vsid     Esid Type  Description          LPage  Inuse    Pin  Pgsp  Virtual
    0       0 work  kernel seg               -   4375   2176   847     4375
48412       2 work  process private          -   2357      2     0     2357
6c01b       d work  shared library text      -   1790      0     0     1790
4c413       f work  shared library data      -     11      0     0       11
3040c       1 pers  code,/dev/prodlv:4097    -      2      0     -        -
ginger :svmon -P 13548 -i 1 3

  Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage
13548                          pacman         8589       2178       847     8587      N     N     N

Vsid     Esid Type  Description          LPage  Inuse    Pin  Pgsp  Virtual
   0        0 work  kernel seg               -   4375   2176   847     4375
48412       2 work  process private          -   2411      2     0     2411
6c01b       d work  shared library text      -   1790      0     0     1790
4c413       f work  shared library data      -     11      0     0       11
3040c       1 pers  code,/dev/prodlv:4097    -      2      0     -        -

  Pid                         Command        Inuse        Pin      Pgsp  Virtual 64-bit Mthrd LPage
13548                          pacman         8599       2178       847     8597      N     N     N

 Vsid     Esid Type  Description          LPage  Inuse    Pin  Pgsp  Virtual
    0        0 work  kernel seg               -   4375   2176   847     4375
48412        2 work  process private          -   2421      2     0     2421
6c01b       d work  shared library text      -   1790      0     0     1790
4c413       f work  shared library data      -     11      0     0       11
3040c       1 pers  code,/dev/prodlv:4097    -      2      0     -        -