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

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

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

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 сдСлана сводка Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π’Π°Π±Π»ΠΈΡ†Π° 15.1. Π‘Π²ΠΎΠ΄ΠΊΠ° особСнностСй инструмСнтов памяти

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ОБ Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠœΠΎΠ΄ΡƒΠ»ΡŒ/ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ
ccmalloc
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт
dmalloc
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π”Π°
efence
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт
memwatch
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ Π”Π° ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт
Moraes
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт
mpatrol
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π”Π°
mtrace
Linux (GLIBC) Π”Π° ΠœΠΎΠ΄ΡƒΠ»ΡŒ НСт
njamd
ΠœΠ½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ½Π°Ρ НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт
valgrind
Linux (GLIBC) НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π”Π°
yamd
Linux, DJGPP НСт ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° НСт

Как Π²ΠΈΠ΄Π½ΠΎ, для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ динамичСской памяти доступСн ряд Π²Ρ‹Π±ΠΎΡ€ΠΎΠ². На систСмах GNU/Linux ΠΈ BSD ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ· этих инструмСнтов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΆΠ΅ установлСны, Ρ‡Ρ‚ΠΎ избавляСт вас ΠΎΡ‚ Ρ…Π»ΠΎΠΏΠΎΡ‚ ΠΏΠΎ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ.

ПолСзно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСсколько инструмСнтов подряд. НапримСр,

mtrace
для обнаруТСния Π½Π΅ освобоТдаСмой памяти, a Electric Fence для ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° доступа ΠΊ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти.

15.5.3. БоврСмСнная

lint

Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π‘ компилятор Π½Π΅ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, списку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Π½Π΅ Π±Ρ‹Π»ΠΎ. Π­Ρ‚ΠΎ часто Π²Π΅Π»ΠΎ ΠΊ Π½Π΅ΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹ΠΌ ошибкам, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ лишь частично ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π²ΠΎ врСмя тСстирования, ΠΈΠ»ΠΈ ΠΌΠΎΠ³ Π΄Π°ΠΆΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π²ΠΎ врСмя тСстирования. НапримСр:

if (argc < 2)

Β fprintf ("usage: %s [ options ] files\n", argv[0]);

Β Β /* отсутствуСт stderr */

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, содСрТащая этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вызываСтся с ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΌ числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²,

fprintf()
, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отсутствуСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚
FILE*
, Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вызываСтся.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° V7

lint
Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Она Π΄Π΅Π»Π°Π»Π° Π΄Π²Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, сначала собирая свСдСния ΠΎΠ± Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ сравнивая Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с собранной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. ΠžΡΠΎΠ±Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Β«Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
lint
Β» прСдоставляли свСдСния ΠΎ функциях стандартных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, lint провСряла Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ конструкции.

Π‘ появлСниСм Π² стандартном Π‘ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²

lint
ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»Π°ΡΡŒ, Π½ΠΎ Π½Π΅ исчСзла совсСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ C89 всС Π΅Ρ‰Π΅ допускаСт объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² старом стилС.

extern int some_func(); /* Бписок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² нСизвСстСн */