ÇÁ·Î±×·¥ÀÇ ÇÁ·ÎÆÄÀϸµ Á¤º¸¸¦ »ý¼ºÇϱâ À§ÇÑ Ã¹ ¹ø° °úÁ¤Àº ÇÁ·ÎÆÄÀÏÇÏ°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥À» ÇÁ·ÎÆÄÀϸµÀÌ °¡´ÉÇϵµ·Ï ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÏ´Â ÀÛ¾÷ÀÌ´Ù.
ÇÁ·ÎÆÄÀϸµÀÌ °¡´ÉÇϵµ·Ï ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ·Á¸é GNU CC ÄÄÆÄÀÏ·¯ÀÇ `-pg' ÀÇ ¿É¼ÇÀ» ±âÁ¸¿¡ »ç¿ëÇÏ´ø ¿É¼Ç¿¡ Ãß°¡ÇÏ¿© ÄÄÆÄÀÏÇÏ¿©¾ß ÇÑ´Ù.
ÇÁ·ÎÆÄÀϸµÀÌ °¡´ÉÇϵµ·Ï ÇÁ·Î±×·¥À» ¸µÅ©Çϱâ À§Çؼ´Â ±âÁ¸¿¡ »ç¿ëÇÏ´ø ¿É¼Ç¿¡ `-pg' ¿É¼ÇÀ» Ãß°¡ÇÏ¿© cc¿Í °°Àº ÄÄÆÄÀÏ·¯¸¦ ÇÑ´Ù. ÇÁ·ÎÆÄÀϸµ¿¡ ÇÊ¿äÇÑ ÀÛ¾÷À» ¼öÇàÇϵµ·Ï ÄÄÆÄÀÏÇϰųª ¸µÅ·Çϴµ¥ µ¿ÀÏÇÑ `-pg' ¿É¼ÇÀÌ »ç¿ëµÈ´Ù. ´ÙÀ½Àº ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ÇÁ·Î±×·¥ ÄÄÆÄÀÏ ¹× ¸µÅ·ÀÇ ¿¹ÀÌ´Ù.
cc -g -c myprog.c utils.c -pg cc -o myprog myprog.o utils.o -pg
`-pg'¿É¼ÇÀº ÄÄÆÄÀÏ°ú ¸µÅ©¸¦ ÇѲ¨¹ø¿¡ ¼öÇàÇÏ´Â ´ÙÀ½ ¸í·É¾î Çü½Ä¿¡µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
cc -o myprog myprog.c utils.c -g -pg
cc
¿Í °°Àº ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏÁö ¾Ê°í ld
¸µÄ¿¸¦ Á÷Á¢ ½ÇÇàÇÏ´Â °æ¿ì¿¡´Â ÀϹÝÀûÀ¸·Î
»ç¿ëµÇ´Â startup fileÀÎ `crt0.o' ´ë½Å¿¡ profiling startup fileÀÎ
`gcrt0.o' ¸¦ ù ¹ø° ÀÔ·Â ÆÄÀÏ·Î ÁöÁ¤ÇÏ¿©¾ß ÇÑ´Ù. ¶ÇÇÑ ÀϹÝÀûÀ¸·Î
»ç¿ëµÇ´Â C¶óÀ̺귯¸®¸¦ ÁöÁ¤ÇÏ´Â `-lc' ¿É¼Ç ´ë½Å¿¡ ÇÁ·ÎÆÄÀϸµ ±â´ÉÀÌ
Ãß°¡µÈ C¶óÀ̺귯¸®
`libc_p.a'¸¦
ÁöÁ¤ÇÏ´Â `-lc_p' ¸¦ ¸µÄ¿ ld
¿¡ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀϹÝ
C¶óÀ̺귯¸®´ë½Å¿¡ ÇÁ·ÎÆÄÀϸµ ±â´ÉÀÌ Ãß°¡µÈ C¶óÀ̺귯¸®¸¦ ¹Ýµå½Ã »ç¿ëÇؾßÇÏ´Â
°ÍÀº ¾Æ´ÏÁö¸¸, ÇÁ·ÎÆÄÀϸµ ±â´ÉÀÌ Æ÷ÇÔµÈ C¶óÀ̺귯¸®¸¦
¸µÄ¿ ld
¿¡ »ç¿ëÇÔÀ¸·Î½á read()
¿Í open()
°ú °°Àº Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ
Ƚ¼ö
Á¤º¸¸¦ Ãß°¡ÀûÀ¸·Î ¾òÀ» ¼ö°¡ ÀÖ´Ù.
¿¹¸¦ µé¾î ´ÙÀ½°ú ¸í·ÉÀ» ÅëÇØ ¸µÄ¿ ld
¸¦ Á÷Á¢»ç¿ëÇÒ ¼ö ÀÖ´Ù.
ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
ÇÁ·Î±×·¥À» ±¸¼ºÇÏ´Â ¸ðµâ ÀϺθ¸À» `-pg' ¿É¼ÇÀ¸·Î ÄÄÆÄÀÏÇÑ °æ¿ì¿¡µµ ÇÁ·Î±×·¥¿¡
´ëÇÑ ÇÁ·ÎÆÄÀÏ Á¤º¸¸¦ ¾òÀ» ¼ö´Â ÀÖÁö¸¸, `-pg' ¿É¼ÇÀÌ »ç¿ëµÇÁö ¾Ê´Â ¸ðµâ¿¡ ´ëÇÑ ¿ÏÀüÇÑ
ÇÁ·ÎÆÄÀÏ Á¤º¸´Â ¾òÀ» ¼ö ¾ø°Ô µÈ´Ù. Áï, ÇÁ·ÎÆÄÀϸµ ¿É¼Ç (`-pg' ¿É¼Ç)ÀÌ »ç¿ëµÇÁö
¾ÊÀº ¸ðµâ ³»¿¡ ÀÖ´Â ÇÔ¼öµéÀÇ °æ¿ì ÇÔ¼ö È£Ãâ Ƚ¼ö³ª ¾îµð¿¡¼ È£ÃâµÇ¾ú´Â Áö¿¡ ´ëÇÑ
ºÐ¼® Á¤º¸°¡ ¾ø±â ¶§¹®¿¡.`-pg' ¿É¼ÇÀÌ »ç¿ëµÇÁö ¾ÊÀº ¸ðµâ
³»¿¡ Æ÷ÇÔµÈ ÇÔ¼ö¿¡
´ëÇؼ´Â ¼ÒºñµÈ ÃÑ ½Ã°£ Á¤º¸¸¸À» ¾òÀ» ¼ö ÀÖ´Ù. ÇÁ·ÎÆÄÀϸµ ¿É¼ÇÀÌ »ç¿ëµÇÁö ¾ÊÀº ÇÔ¼öÀÇ °æ¿ì,
ÇÔ¼öÀÇ calls
Çʵ尡 ºñ¾îÀÖ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í´Â flat profile¿¡ ¿µÇâÀ» ÁÖÁö´Â
¾ÊÁö¸¸ call graphÀÇ À¯¿ë¼ºÀ» Å©°Ô °¨¼Ò½ÃŲ´Ù.
¶óÀδÜÀ§ÀÇ ÇÁ·ÎÆÄÀϸµÀ» ¼öÇàÇÏ°íÀÚ ÇÑ´Ù¸é `-g' ¿É¼ÇÀ» ÁöÁ¤ÇÏ¿©¾ß ÇÑ´Ù. `-g' ¿É¼ÇÀº ÄÄÆÄÀÏ·¯¿¡°Ô ÇÁ·Î±×·¥ ÁÖ¼Ò(program addresses)°¡ ¼Ò½º ÄÚµå ¶óÀΰú ÀÏÄ¡Çϵµ·Ï µð¹ö±ë ½Éº¼À» »ðÀÔÇϵµ·Ï ÁöÁ¤ÇÏ´Â ¿É¼ÇÀÌ´Ù. ¶óÀÎ ´ÜÀ§ ÇÁ·ÎÆÄÀϸµ ¼½¼Ç ÂüÁ¶
`-pg' ¿Í `-g' ¿É¼Ç¿¡ Ãß°¡ÇÏ¿© ÄÄÆÄÀϽÿ¡ `-a' ¿É¼ÇÀ»
ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. `-a' ¿É¼ÇÀº ÇÁ·Î±×·¥ÀÌ ±âº» ºí·Ï(basic block) Ä«¿îÆÃÀ» ÇÏ°Ô²û
Áö½ÃÇÏ¿© ÇÁ·Î±×·¥ÀÌ ½ÇÇà Áß¿¡ °¢°¢ÀÇ `if'
¹®¿¡ µû¸¥ ºÐ±â°¡ ½ÇÇàµÈ Ƚ¼ö, °¢°¢ÀÇ `do' ·çÇÁ¿¡¼ °¢°¢ÀÇ iterationÀÌ
½ÇÇàµÈ Ƚ¼öµîÀÌ Ä«¿îÆ®µÈ´Ù. ÀÌ ¿É¼ÇÀ» ÅëÇÏ¿© gprof
Àº °¢°¢ÀÇ ¶óÀÎÀÌ
½ÇÇàµÈ Ƚ¼ö¸¦ º¸¿©ÁÖ´Â annotated source code ¸®½ºÆà Á¤º¸¸¦ ¸¸µé ¼ö ÀÖ°Ô µÈ´Ù.
¿ªÀÚÁÖ : ±âº»ºí·°(basic block)À̶õ ÇÁ·Î±×·¥ÀÇ Á¦¾î(control)°¡ ½ÃÀÛÁ¡À¸·Î µé¾î°¡¼ ³¡Á¡À¸·Î ³ª¿Ã¶§±îÁö Á¤Áö(halt)³ª ºÐ±âÀÇ °¡´É¼º(³¡Á¡¿¡¼ÀÇ ºÐ±â´Â Á¦¿Ü)ÀÌ ¾ø´Â ¿¬¼ÓÀûÀÎ ¹®ÀåµéÀÇ ÁýÇÕÀ» ¸»ÇÑ´Ù.