Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 152

Автор ΠΡ€Π½ΠΎΠ»ΡŒΠ΄ Роббинс

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Valgrind Π² дСйствии. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ch15-badmem.c? (Π‘ΠΌ. Ρ€Π°Π·Π΄Π΅Π» 15.5.2.2 Β«Electric FenceΒ».) ΠžΠΏΡ†ΠΈΡ -b записываСт Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π°Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ Π²Π½Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ malloc() Π±Π»ΠΎΠΊΠ°. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ сообщаСт Valgrind:

$ valgrind ch15-badmem1 -b

1  ==8716== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

2  ==8716== Copyright (C) 2002-2003, and GNU GPL'd, by Julian Seward.

3  ==8716== Using valgrind-20030725, a program supervision framework for x86-linux.

4  ==8716== Copyright (C) 2000-2003, and GNU GPL'd, by Julian Seward.

5  ==8716== Estimated CPU clock rate is 2400 MHz

6  ==8716== For more details, rerun with: -v

7  ==8716==

8  p = <not 30 bytes>

9  ==8716== Invalid write of size 1

10 ==8716== at 0x8048466: main (ch15-badmem1.c:18)

11 ==8716== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

12 ==8716== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

13 ==8716== Address 0x4104804E is 12 bytes after a block of size 30 alloc'd

14 ==8716== at 0x40025488: malloc (vg_replace_malloc.с:153)

15 ==8716== by 0x8048411: main (ch15-badmem1.c:11)

16 ==8716== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

17 ==8716== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

18 ==8716==

19 ==8716== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

20 ==8716== malloc/free: in use at exit: 30 bytes in 1 blocks.

21 ==8716== malloc/free: 1 allocs, 0 frees, 30 bytes allocated.

22 ==8716== For a detailed leak analysis, rerun with: --leak-check=yes

23 ==8716== For counts of detected errors, rerun with: -v

(Π‘Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π² Π²Ρ‹Π²ΠΎΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ обсуТдСниС.) Π‘Ρ‚Ρ€ΠΎΠΊΠ° 8 являСтся Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‚ Valgrind Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС находится Π² строках 9–17. Она ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько Π±Π°ΠΉΡ‚ΠΎΠ² Π±Ρ‹Π»ΠΎ записано Π½Π΅Π²Π΅Ρ€Π½ΠΎ (строка 9), Π³Π΄Π΅ это ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ (строка 10), ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ трассировку стСка. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 13–17 ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 19–23 подводят ΠΈΡ‚ΠΎΠ³ΠΈ.

ΠžΠΏΡ†ΠΈΡ -f ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ch15-badmem1 освобоТдаСт Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ записываСт Π² Π½Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· висячий ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ сообщаСт Valgrind Π² этом случаС:

$ valgrind ch15-badmem1 -f

==8719== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

...

p = <not 30 bytes>

==8719== Invalid write of size 1

==8719== at 0x8048498: main (ch15-badmem1.с:21)

==8719== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

==8719== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

==8719== Address 0x41048024 is 0 bytes inside a block of size 30 free'd

==8719== at 0x40025722: free (vg_replace_malloc.с:220)

==8719== by 0x8048491: main (ch15-badmem1.c:20)

==8719== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

==8719== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

...

На этот Ρ€Π°Π· Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ запись Π±Ρ‹Π»Π° осущСствлСна Π² ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² free() находится Π² строкС 20 ch15-badmem1.c.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π±Π΅Π· ΠΎΠΏΡ†ΠΈΠΉ ch15-badmem1.c выдСляСт ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ освобоТдаСт Π΅Π΅. О Ρ‚Π°ΠΊΠΎΠΌ случаС сообщаСт опция β€”leak-check=yes:

$ valgrind --leak-check=yes ch15-badmem1

1  ==8720== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

...

8  p = <not 30 bytes>

9  ==8720==

10 ==8720== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

11 ==8720== malloc/free: in use at exit: 30 bytes in 1 blocks.

12 ==8720== malloc/free: 1 allocs, 0 frees, 30 bytes allocated.

...

16 ==8720==

17 ==8720== 30 bytes in 1 blocks are definitely lost in loss record 1 of 1

18 ==8720== at 0x40025488: malloc (vg_replace_malloc.c:153)

19 ==8720== by 0x8048411: main (ch15-badmem1.c:11)

20 ==8720== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

21 ==8720== by 0x8048368: (within /home/arnold/progex/code/ch15/ch15-badmem1)

22 ==8720==

23 ==8720== LEAK SUMMARY:

24 ==8720== definitely lost: 30 bytes in 1 blocks.

25 ==8720== possibly lost: 0 bytes in 0 blocks.

26 ==8720== still reachable: 0 bytes in 0 blocks.

27 ==8720== suppressed: 0 bytes in 0 blocks.

28 ==8720== Reachable blocks (those to which a pointer was found) are not shown.

29 ==8720== To see them, rerun with: --show-reachable=yes

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 17–29 ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅; эта ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π² строкС 11 ch15-badmem1.с.

Помимо ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании динамичСской памяти, Valgrind ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ch15-badmem3.c:

1  /* ch15-badmem3.c --- ΠΏΠ»ΠΎΡ…ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с нСдинамичСской ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ */

2

3  #include <stdio.h>

4  #include <stdlib.h>

5

6  int main(int argc, char **argv)

7  {

8   int a_var; /* ОбС Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ */

9   int b_var;

10

11  /* Valgrind Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ это; см. тСкст. */

12  a_var = b_var;

13

14  /* ИспользованиС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти; это отмСчаСтся. */

15  printf("a_var = %d\n", a_var);

16

17  return 0;

18 }

ΠŸΡ€ΠΈ запускС Valgrind Π²Ρ‹Π΄Π°Π΅Ρ‚ этот (сокращСнный) ΠΎΡ‚Ρ‡Π΅Ρ‚:

==29650== Memcheck, a.k.a. Valgrind, a memory error detector for x86-linux.

...

==29650== Use of uninitialised value of size 4

==29650== at 0x42049D2A: _IO_vfprintf_internal (in /lib/i686/libc-2.2.93.so)

==29650== by 0x420523C1: _IO_printf (in /lib/1686/libc-2.2.93.so)

==29650== by 0x804834D: main (ch15-badmem3.с:15)

==29650== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

==29650==

==29650== Conditional jump or move depends on uninitialised value(s)

==29650== at 0X42049D32: _IO_vfprintf_internal (in /lib/i686/libc-2.2.93.so)

==29650== by 0x420523C1: _IO_printf (in / lib/i686/libc-2.2.93.so)

==29650== by 0x804834D: main (ch15-badmem3.c:15)

==29650== by 0x420158D3: __libc_start_main (in /lib/i686/libc-2.2.93.so)

...

a_var = 1107341000

==29650==

==29650== ERROR SUMMARY: 25 errors from 7 contexts (suppressed: 0 from 0)

==29650== malloc/free: in use at exit: 0 bytes in 0 blocks.

==29650== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.

==29650== For a detailed leak analysis, rerun with: --leak-check=yes

==29650== For counts of detected errors, rerun with: -v

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Valgrind ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° memcheck ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ состояниС Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅) ΠΈ отслСТиваСт Π΅Π³ΠΎ ΠΏΡ€ΠΈ пСрСмСщСниях Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, a_var считаСтся Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΎΡ‚ b_var, которая Π±Ρ‹Π»Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ.

memcheck сообщаСт ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π—Π΄Π΅ΡΡŒ это происходит Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π‘ (_IO_vfprintf_internal()), которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² строку, для этого, ΠΎΠ½Π° ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ вычислСния.

К соТалСнию, хотя Valgrind ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ использованиС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ уровня Π±ΠΈΡ‚ΠΎΠ², ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³Ρ€Π°Π½ΠΈΡ† массивов для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. (Valgrind ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π³Ρ€Π°Π½ΠΈΡ† для динамичСской памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ сам ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, поэтому Π·Π½Π°Π΅Ρ‚ ΠΎ Π½Π°Ρ‡Π°Π»Π΅ ΠΈ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ области.)

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Valgrind являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ памяти. Он использовался Π² Ρ‚Π°ΠΊΠΈΡ… ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ…, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… производствСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΊΠ°ΠΊ KDE 3, OpenOffice ΠΈ Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Konqueror. Он ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ с нСсколькими коммСрчСскими прСдлоТСниями, Π° другая Π΅Π³ΠΎ вСрсия Π±Ρ‹Π»Π° Π΄Π°ΠΆΠ΅ использована (совмСстно с эмулятором WINE[182]) для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных для Microsoft Windows с использованиСм Visual Π‘++! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Valgrind с Π΅Π³ΠΎ Π²Π΅Π±-сайта[183].

15.5.2.5. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ malloc

Π”Π²Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Cal Ericson Π² Linux Journal ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ mtrace ΠΈ dmalloc, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… пСрСчислСнных Π½ΠΈΠΆΠ΅ инструмСнтов. Π­Ρ‚ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ Memory Leak Detection in Embedded Systems, выпуск 101[184], ΡΠ΅Π½Ρ‚ΡΠ±Ρ€ΡŒ 2002 Π³., ΠΈ Memory Leak Detection in C++, выпуск 110[185], июнь 2003 Π³. ОбС ΡΡ‚Π°Ρ‚ΡŒΠΈ доступны Π½Π° Π²Π΅Π±-сайтС Linux Journal.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты сходны ΠΏΠΎ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ с описанными Ρ€Π°Π½Π΅Π΅.

ccmalloc

Π—Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ malloc() Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая Π½Π΅ нуТдаСтся Π² особой компиляции ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π‘++. Π‘ΠΌ. http://www.inf.ethz.ch/personal/biere/projects/ccmalloc.

malloc ΠœΠ°Ρ€ΠΊΠ° ΠœΠΎΡ€Π°Π΅ΡΠ° (Mark Moraes)

Бтаринная, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° замСщСния malloc(), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ возмоТности профилирования, трассировки ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ с ftp://ftp.cs.toronto.edu/pub/moraes/malloc-1.18.tar.gz.

mpatrol

ΠŸΠ°ΠΊΠ΅Ρ‚ с большими возмоТностями настройки для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ памяти ΠΈ тСстирования. Π‘ΠΌ http://www.cbmamiga.demon.со.uk/mpatrol.

memwatch

ΠŸΠ°ΠΊΠ΅Ρ‚, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ использования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΎΠΏΡ†ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компилирования. Π‘ΠΌ. http://www.linkdata.se/sourcecode.html.

njamd

«НС просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ mallocΒ» (Not Just Another Malloc Debugger). Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ; вмСсто этого ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ LD_PRELOAD для Π·Π°ΠΌΠ΅Π½Ρ‹ стандартных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π‘ΠΌ. http://sourceforge.net/projects/njamd.

yamd

ΠŸΠΎΡ…ΠΎΠΆ Π½Π° Electric Fence, Π½ΠΎ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями. Π‘ΠΌ. http://www3.hmc.edu/~neldredge/yamd.

ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΠΈΠ· этих ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Ρ‚ΠΎΡ‡Π½ΠΎΠΉ настройки своСго повСдСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 15.1 Π½Π° основС статСй ΠΈΠ· Linux Journal сдСлана сводка Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².