óÀ½, ÀÌÀü, ´ÙÀ½, ¸¶Áö¸· ¼½¼Ç, ¸ñÂ÷


ÇÁ·ÎÆÄÀϸµÀ» À§ÇÑ ÇÁ·Î±×·¥ ÄÄÆÄÀÏ ¹æ¹ý

ÇÁ·Î±×·¥ÀÇ ÇÁ·ÎÆÄÀϸµ Á¤º¸¸¦ »ý¼ºÇϱâ À§ÇÑ Ã¹ ¹ø° °úÁ¤Àº ÇÁ·ÎÆÄÀÏÇÏ°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥À» ÇÁ·ÎÆÄÀϸµÀÌ °¡´ÉÇϵµ·Ï ÄÄÆÄÀÏÇÏ°í ¸µÅ©ÇÏ´Â ÀÛ¾÷ÀÌ´Ù.

ÇÁ·ÎÆÄÀϸµÀÌ °¡´ÉÇϵµ·Ï ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ·Á¸é 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)³ª ºÐ±âÀÇ °¡´É¼º(³¡Á¡¿¡¼­ÀÇ ºÐ±â´Â Á¦¿Ü)ÀÌ ¾ø´Â ¿¬¼ÓÀûÀÎ ¹®ÀåµéÀÇ ÁýÇÕÀ» ¸»ÇÑ´Ù.


óÀ½, ÀÌÀü, ´ÙÀ½, ¸¶Áö¸· ¼½¼Ç, ¸ñÂ÷