|
Microsoft .NET Framework ¿¡ ÀÇÇØ °³¹ßÀÚÀÇ »ý»ê¼ºÀÌ Çâ»óÇÏ´Â °Í¿¡ Àǹ®ÀÇ ¿©Áö´Â ¾ø½À´Ï´Ù. ±×·¯³ª ±× ÇÑÆíÀ¸·Î ¸Å´ÏÁö ÄÚµåÀÇ ÆÛÆ÷¸Õ½º¿¡ ´ëÇØ ¿°·Á¸¦ ¾È°í ÀÖ´Â »ç¶÷µéÀÌ
¸¹ÀÌ ÀÖ½À´Ï´Ù. ½Å ¹öÁ¯ÀÇ Visual C++ ¿¡ ÀÇÇØ ÀÌ·¯ÇÑ ¿°·Á´Â ºÒ½Ä µË´Ï´Ù. Visual
Studio 2005 ¿¡¼´Â º¸´Ù ½Å¼ÓÇÑ ¾îÇø®ÄÉÀÌ¼Ç ÀÛ¼ºÀ» ¸ñÀûÀ¸·Î ÇÏ¿© C++ ÀÇ
±¸¹® ÀÚü°¡ Å«ÆøÀ¸·Î °³·®µÇ°í ÀÖ½À´Ï´Ù. ±×¸®°í À¯¿¬ÇÑ
¾ð¾î üÁ¦°¡ ÁغñµÇ¾î ÀÖ¾î °øÅë ¾ð¾î ·±Å¸ÀÓ (CLR) °ú Á¦ÈÞ½ÃŰ´Â °Í¿¡ ÀÇÇØ ÆÛÆ÷¸Õ½ºÀÇ ³ôÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
C++ Àº ³×ÀÌÆ¼ºê Äڵ带 »ý¼ºÇϱ⠶§¹®¿¡ ÆÛÆ÷¸Õ½º°¡ ÁÁ´Ù°í »ý°¢ÇÏ´Â ÇÁ·Î±×·¡¸Ó°¡ ´Ù¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª
¿ÏÀüÇÑ ¸Å´ÏÁö Äڵ忡¼µµ ¶Ù¾î³ ÆÛÆ÷¸Õ½º¸¦ ¾òÀ»
¼ö ÀÖ½À´Ï´Ù. C++¿¡¼´Â
À¯¿¬ÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÌ Ã¤¿ëµÇ°í Àֱ⠶§¹®¿¡ , ÀýÂ÷Çü ÇÁ·Î±×·¡¹Ö, °´Ã¼
ÁöÇâ ÇÁ·Î±×·¡¹Ö, »ý¼ºÀû ÇÁ·Î±×·¡¹Ö, ¸ÞŸ ÇÁ·Î±×·¡¹Ö
µî¿¡ À¯Àú°¡ ¼Ó¹ÚµÉ °ÍÀº ¾ø½À´Ï´Ù.
ÇÁ·Î±×·¡¸Ó°¡ °¡Áö°í ÀÖ´Â 1°³ÀÇ °øÅëÀÇ ¿ÀÇØ´Â .NET Framework °¡ ¶Ù¾î³ ÆÛÆ÷¸Õ½º´Â »ç¿ëÇÏ´Â ¾ð¾î¿¡
¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. Áï ÇÁ·Î±×·¡¸Ó´Â ´Ù¾çÇÑ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ »ý¼ºµÇ´Â Microsoft Áß°£ ¾ð¾î (MSIL) °¡ º»ÁúÀûÀ¸·Î °°´Ù¶ó°í
º¸°í ÀÖ½À´Ï´Ù. Visual
Studio .NET 2003 ¿¡¼ Á¶Â÷ ÀÌ·¯ÇÑ »ý°¢Àº ¿Ã¹Ù¸£Áö´Â ¾Ê½À´Ï´Ù. ÇÑÃþ ´õ Visual Studio 2005 ¿¡ À־ C++ ÄÄÆÄÀÏ·¯
ÆÀÀÌ ¼ö³â¿¡ °ÉÄ¡´Â ³×ÀÌÆ¼ºê ÄÚµåÀÇ ÃÖÀûȷκÎÅÍ ¾òÀ» ¼ö ÀÖ´ø Áö½ÄÀ» ¸Å´ÏÁö ÄÚµåÀÇ ÃÖÀûÈ¿¡ È®½ÇÈ÷ Àû¿ëÇÒ ¼ö ÀÖµµ·Ï ´Ù´ëÇÑ ³ë·ÂÀ» ¼ÒºñÇß½À´Ï´Ù. C++ ¿¡¼´Â °í ÆÛÆ÷¸Õ½º ¸¶¼£¸µµîÀÇ ¼¼¼¼ÇÑ Á¶Á¤À» ÇàÇϱâ À§ÇÑ À¯¿¬¼ºÀÌ Á¦°øµÇ°í
ÀÖ½À´Ï´Ù. ´Ù¸¥ ¾ð¾î¿¡¼´Â ÀÌ·¯ÇÑ À¯¿¬¼ºÀº ½ÇÇöµÉ ¼ö ¾ø½À´Ï´Ù. °Ô´Ù°¡Visual C++ ÄÄÆÄÀÏ·¯´Â ´Ù¸¥ .NET ¾ð¾î¿Í ºñ±³ÇØ º¸´Ù
ÃÖÀûÈµÈ MSIL¸¦ »ý¼ºÇÕ´Ï´Ù. ±× °á°ú °¡Àå ÃÖÀûȵÈ
.NET ÀÇ Äڵ带
»ý¼ºÇÏ´Â °ÍÀº Visual C++ ÄÄÆÄÀÏ·¯¶ó´Â °ÍÀÌ µË´Ï´Ù.
ÃÖÀûÈµÈ MSIL
.NET ȯ°æÀÇ ÄÄÆÄÀÏÀº 2 °³ÀÇ ºÎºÐÀ¸·Î ³ª´ ¼ö°¡ ÀÖ½À´Ï´Ù. 1 °³´Â ÇÁ·Î±×·¡¸Ó°¡ ¾ð¾î ÄÄÆÄÀÏ·¯ (C#,Visual Basic, ¶Ç´Â Visual
C++) À» »ç¿ëÇØ ÄÄÆÄÀϰú ÃÖÀûȸ¦ ½Ç½ÃÇØ MSIL ¸¦ »ý¼ºÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ¶Ç Çϳª´Â Á®½ºÆ®ÀΟÀÓ(JIT) ÄÄÆÄÀÏ·¯ ¶Ç´Â NGENÀÌ MSIL¸¦ ¹Þ¾Æ ±×°ÍÀ» Àоîµé¿© ÃÖÀûÈµÈ ³×ÀÌÆ¼ºêÀÎ ±â°è¾î Äڵ带 »ý¼ºÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ¾ð¾î ÄÄÆÄÀÏ·¯¿Í JIT °¡ ¹ÐÁ¢ÇÏ°Ô °áÇյǰí ÀÖ´Â °ÍÀº ºÐ¸íÇÕ´Ï´Ù. Áï ¶Ù¾î³ Äڵ带 ÀÛ¼ºÇÏ·Á¸é
¾ç ÄÄÆÛ³ÍÆ®ÀÇ Á¦ÈÞ°¡ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.
Visual C++ Àº ¾î´À ÄÄÆÄÀÏ·¯º¸´Ù °íµµÀÇ ÃÖÀûȸ¦ Ç×»ó Á¦°øÇØ ¿Ô½À´Ï´Ù. À̰ÍÀº ¸Å´ÏÁö Äڵ忡 ´ëÇØ¼µµ °°½À´Ï´Ù. ³×ÀÌÆ¼ºê ÄÄÆÄÀÏ·¯¿¡ ÀÇÇÑ
MSIL ÄÚµå »ý¼ºÀÇ ÃÖÀûÈ´Â Visual C++ .NET 2003 ¿¡¼ óÀ½À¸·Î µµÀԵǾú½À´Ï´Ù¸¸
ÀÌ ½ÃÁ¡¿¡¼ ÀÌ¹Ì °íµµÀÇ ±â´ÉÀÌ ÁغñµÇ¾î ÀÖ¾ú½À´Ï´Ù.
Visual C++ 2005 ÀÇ ÄÄÆÄÀÏ·¯¿¡¼´Â Ç¥ÁØÀûÀÎ ³×ÀÌÆ¼ºê
ÄÚµåÀÇ ÃÖÀûÈÀÇ ´ëºÎºÐÀ» MSIL Äڵ忡 ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ
ÃÖÀûÈ¿¡´Â µ¥ÀÌÅÍ ÇÃ·Î¿ì º£À̽ºÀÇ ÃÖÀûȷκÎÅÍ ·çÇÁ Àü°³ÀÇ ½ÄÀÇ ÃÖÀûȱîÁö ¸ðµç Á¾·ù°¡ Æ÷ÇԵ˴ϴÙ. ´Ù¸¥ ¾î´À .NET Ç÷§Æû»óÀÇ ¾ð¾îµµ ÀÌ ·¹º§ÀÇ ÃÖÀûÈ´Â °®Ãß°í
ÀÖÁö ¾Ê½À´Ï´Ù. Visual
C++ .NET 2003 ¿¡¼ /clr ½ºÀÄ¡¸¦ »ç¿ëÇÑ ºôµå¿¡ ´ëÇÑ ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûÈ (WPO) ÀÇ ¼Æ÷Æ®´Â ÇàÇØÁö°í ÀÖÁö ¾Ê¾Ò½À´Ï´Ù¸¸ Visual C++ 2005 ¿¡¼ ÀÌ ±â´ÉÀ» ¸Å´ÏÁö Äڵ忡 Àû¿ëÇÒ
¼ö ÀÖ½À´Ï´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϸé Å©·Î½º ¸ðµâÀÇ ÃÖÀûȰ¡ ½ÇÇà °¡´ÉÇÏ°Ô µË´Ï´Ù. ÀÌ Á¡¿¡ ´ëÇØ¼´Â ÀÌ ±â»çÀÇ ÈĹݿ¡ ¼³¸íÇÕ´Ï´Ù.
Visual C++ 2005 ÀÇ ¸Å´ÏÁö Äڵ忡 Àû¿ëÇÒ ¼ö ¾ø´Â
À¯ÀÏÇÑ ÃÖÀûÈ Å¬·¡½º´Â Profile Guided Optimization ÀÔ´Ï´Ù. ÇÏÁö¸¸ Àå·¡ÀÇ ¹öÁ¯¿¡¼´Â ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÇ°ÚÁö¿ä. »ó¼¼ÇÑ °Í¿¡ ´ëÇÏ¿©´Â ¡¸Write Faster Code with the Modern Language Features of Visual
C++ 2005¡¹(¿µ¾î) ¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
JIT °ú ÄÄÆÄÀÏ·¯ ÃÖÀûÈÀÇ »óÈ£ÀÛ¿ë
JIT ¶Ç´Â NGEN Àº
Visual C++ ÀÌ »ý¼ºÇÏ´Â ÃÖÀûÈ ÄÚµå·ÎºÎÅÍ native
code¸¦ »ý¼ºÇÕ´Ï´Ù. Visual C++ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ »ý¼ºµÈ Äڵ尡 MSILÀΰ¡ ¾ð ¸Å´ÏÁö ÄÚµå(ºñ°ü¸® ÄÚµå)Àΰ¡¿¡ °ü°è¾øÀÌ ÄÚµåÀÇ »ý¼º¿¡´Â 10 ³â ÀÌ»ó¿¡ °ÉÃļ °³¹ß ¹× Á¶Á¤À» ÇØ ¿Â ¿ÉƼ¸¶ÀÌÀú°¡
»ç¿ëµË´Ï´Ù.
MSIL Äڵ忡 Àû¿ëµÇ´Â ÃÖÀûÈ´Â ¾ð ¸Å´ÏÁö Äڵ忡
Àû¿ëµÇ´Â ÃÖÀûÈ¿Í °ÅÀÇ °°½À´Ï´Ù. ÄÄÆÄÀÏ·¯°¡ °ËÁõ °¡´ÉÇÑ ÄÚµå
(/clr:safe) ¿Í °ËÁõ ºÒ´ÉÀÎ
ÄÚµåÀÇ ¾î´À ÂÊÀ» »ý¼ºÇұ ÀÇÇØ Á¤´çÇÑ ÃÖÀûÈ Å¬·¡½º°¡ ´Ù¸£´Ù°í ÇÏ´Â Á¡Àº ÁöÀûÇØ µÎ´Â °¡Ä¡°¡ ÀÖ½À´Ï´Ù. ¸ÞŸµ¥ÀÌŸ ¶Ç´Â
°ËÁõ °¡´É¼º Á¦¾àÀ» À§Çؼ ÄÄÆÄÀÏ·¯¸¦ ½ÇÇàÇÒ ¼ö ¾ø´Â ÃÖÀûÈÀÇ ¿¹·Î¼´Â °µµÀÇ »è°¨(°ö¼ÀÀ» Æ÷ÀÎÅÍ
°¡»ê¿¡ º¯È¯)À̳ª ¾î´À Ŭ·¡½ºÀÇ private ¸â¹ö ¾×¼¼½º¸¦
´Ù¸¥ Ŭ·¡½ºÀÇ ¸Þ¼Òµå º»Ã¼¿¡ ÀÎ ¶óÀÎÈÇÏ´Â °ÍµîÀÌ
ÀÖ½À´Ï´Ù.
Visual C++ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ »ý¼ºµÈ MSIL ÄÚµå´Â ±×
ÈÄ JIT ¿¡ ÀÇÇØ ÀÌ¿ëµË´Ï´Ù. JIT Àº MSIL À»
Àоîµé¿© ÃÖÀûȸ¦ ½ÇÇàÇÕ´Ï´Ù¸¸ ÀÌ ÃÖÀûÈ´Â MSIL ÀÇ
Â÷ÀÌ¿¡ ¸Å¿ì ¹Î°¨ÇÕ´Ï´Ù. Áï MSIL °¡ ÀÖ´Â ¸í·É ¼ø¼°¡ ÃÖÀûÈÀÇ ¿µÇâÀ» ¸Å¿ì ¹Þ±â ½¬¿î ÇÑÆí ´Ù¸¥ (ÀǹÌÀûÀ¸·Î
°°Àº) ¼ø¼´Â ÃÖÀûÈ¿¡ ÀÇÇØ °ÅÀÇ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù°í ÇÏ´Â ÀÏÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é ·¹Áö½ºÅÍ ÇÒ´çÀ̶ó´Â ºÒ¸®´Â ÃÖÀûÈ¿¡¼´Â JIT ¿ÉƼ¸¶ÀÌÀú°¡ º¯¼ö¸¦ ·¹Áö½ºÅÍ¿¡ ÇÒ´çÇÕ´Ï´Ù. ½ÇÁ¦ÀÇ Çϵå¿þ¾î´Â ÀÌ ·¹Áö½ºÅ͸¦ ¿ÀÆÛ·£µå·Î¼ »ç¿ëÇØ »ê¼ú ¿¬»êÀ̳ª ³í¸® ¿¬»êÀ» ½ÇÇàÇÕ´Ï´Ù. ÀǹÌÀûÀ¸·Î µî°¡ÀÎ Äڵ忡¼µµ ±â¼ú ¹æ¹ýÀÌ ´Ù¸£´Ù¸é ¿ÉƼ¸¶ÀÌÀú°¡
·¹Áö½ºÅÍ ÇÒ´çÀ̶ó´Â °ÍÀ» ÀûÀýÈ÷ ½Ç½ÃÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ·çÇÁ Àü°³ µîÀÇ ÄÚµå º¯È¯Àº JIT ÀÌ ·¹Áö½ºÅÍ ÇÒ´ç¿¡ ÁöÀåÀ» ÃÊ·¡ÇÏ´Â ¿øÀÎÀ¸·Îµµ µÉ ¼ö ÀÖ½À´Ï´Ù.
C++ ÄÄÆÄÀÏ·¯°¡ ½ÇÇàÇÏ´Â ·çÇÁ Àü°³´Â ¸í·É ·¹º§ÀÇ º´·Ä¼ºÀ»
Çâ»ó½ÃÄÑ µ¿½Ã¿¡ º¸´Ù ¸¹Àº »ýÁ¸ º¯¼ö¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ¿ÉƼ¸¶ÀÌÀú´Â
ÀÌ·¯ÇÑ º¯¼ö¸¦ ·¹Áö½ºÅÍ¿¡ ÇÒ´çÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. CLR JIT ¿¡¼´Â ÃßÀû °¡´ÉÇÑ ·¹Áö½ºÅÍ ÇÒ´çÀ»
À§ÇÑ º¯¼öÀÇ ¼ö´Â °íÁ¤µÇ°í ÀÖ½À´Ï´Ù. ÀÌ Á¤¼ö¸¦ ³Ñ´Â º¯¼ö¸¦ ÃßÀûÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì JIT ´Â ·¹Áö½ºÅÍÀÇ ³»¿ëÀ» ¸Þ¸ð¸®·Î ¿Å±é´Ï´Ù.
ÀÌ·¯ÇÑ ÀÌÀ¯À̱⠶§¹®¿¡ ÃÖÀûÀÎ ÄÚµåÀÇ »ý¼º¿¡´Â
Visual C++ ÄÄÆÄÀÏ·¯¿Í JIT ¸¦
Á¦ÈÞÇØ Á¶Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. Visual C++ ÄÄÆÄÀÏ·¯°¡ ½ÇÇàÇÏ´Â °ÍÀº JIT ÀÌ ½ÇÇàÇÏ·Á¸é ½Ã°£ÀÌ ³Ê¹« °É¸®´Â ÃÖÀûȳª C++ ¼Ò½º·ÎºÎÅÍ MSIL ¿¡ ÄÄÆÄÀÏ ÇÏ´Â °úÁ¤¿¡¼ ¸Å¿ì ¸¹Àº Á¤º¸°¡ ¾ø¾îÁö´Â ÃÖÀûÈÀÔ´Ï´Ù.
´ÙÀ½¿¡ ¸Å´ÏÁö Äڵ忡
´ëÇÑ Visual C++ ÀÇ ÃÖÀûÈ¿¡ ´ëÇØ ¸î °³Àΰ¡¸¦ ºÁ °¡±â·Î ÇսôÙ.
°øÅë ºÎºÐ½ÄÀÇ
»èÁ¦¿Í ¿¬»êÀÇ °£´ÜÈ
°øÅë
ºÎºÐ½ÄÀÇ »èÁ¦(CSE) ¿Í ¿¬»êÀÇ °£´ÜÈ´Â °·ÂÇÑ
ÃÖÀûÈÀÔ´Ï´Ù. ÄÄÆÄÀÏ·¯´Â
ÀÌ·¯ÇÑ ¼ö¹ýÀ» »ç¿ëÇØ ½Ä ·¹º§ÀÇ ±âº»ÀûÀÎ ÃÖÀûȸ¦ ½ÇÇàÇÕ´Ï´Ù. ±× °á°ú °³¹ßÀÚ´Â ¾Ë°í¸®Áò°ú ¾ÆÅ°ÅØÃÄ¿¡ ÁýÁßÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌÇÏ´Â C# ¹× C++ À¸·Î¼ ÄÄÆÄÀÏ µÈ ÄÚµå ½º´ÏÆêÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ¾î´ÀÂÊÀ̳ª Release ±¸¼ºÀ¸·Î
ÄÄÆÄÀÏ µÇ°í ÀÖ½À´Ï´Ù. º¯¼ö a,b,c ´Â Äڵ带 Æ÷ÇÔÇÑ ÇÔ¼ö¿¡ ÆÄ¶ó¹ÌÅͷμ
°Ç³×¹ÞÀº ¹è¿·ÎºÎÅÍ Ä«ÇÇµÈ °ÍÀÔ´Ï´Ù.
int d =
a + b * c;
int e =
(c * b) * 12 + a + (a + b * c);
±×¸² 1 Àº ÃÖÀûȸ¦ À¯È¿ÇÏ°Ô ÇÑ C# ÄÄÆÄÀÏ·¯¿Í C++ ÄÄÆÄÀÏ·¯¿¡
ÀÇÇØ ÀÌ ÄÚµå·ÎºÎÅÍ »ý¼ºµÈ MSIL¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. C# ¿¡¼´Â 19 ÀÇ
¸í·ÉÀÌ ÇÊ¿äÇÕ´Ï´Ù¸¸ C++ ¿¡ ÇÊ¿äÇÑ ¸í·ÉÀº 13 »Ó
ÀÔ´Ï´Ù. ±×¸®°í ÀÌÇØ¿Í °°ÀÌ C++ Äڵ忡¼´Â
½Ä b*C ¿¡ ´ëÇØ¼ CSE °¡ ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù. ¿ÉƼ¸¶ÀÌÀú´Â ¿¬»êÀÇ ´Ü¼øÈ¸¦ ½ÇÇàÇØ a+a ´ë½Å¿¡ 2*a ¸¦ ¶Ç (c*b)*12 + c*b ´ë½Å¿¡ (c*b)*13 ¸¦ °¢°¢ »ý¼ºÇϰí ÀÖ½À´Ï´Ù. ÈÄÀÚÀÇ CSE Àº Ưº°È÷ ¿ì¼öÇÏ´Ù°í »ý°¢ÇÕ´Ï´Ù. ÇÁ·Î±×·¡¸Ó°¡ ÀÌ·¯ÇÑ ¿¬»êÀÇ
´Ü¼øÈ¿¡ ½ÇÆÐÇϰí ÀÖ´Â °ÍÀ» ½ÇÁ¦·Î º» ÀûÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù. "C# ÄÄÆÄÀÏ·¯ÀÇ ÃÖÀûÈ"
¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûÈ
Visual C++ .NET ¿¡¼´Â WPO ÀÌ ¾ð ¸Å´ÏÁö Äڵ忡 ´ëÇØ¼ Ãß°¡µÇ¾ú½À´Ï´Ù. Visual C++ 2005 ¿¡¼ ÀÌ ±â´ÉÀÌ ¸Å´ÏÁö Äڵ忡µµ
È®ÀåµÇ°í ÀÖ½À´Ï´Ù. ¼Ò½º ÆÄÀÏÀÇ ÄÄÆÄÀϰú ÃÖÀûȸ¦ 1 ÆÄÀϾ¿
½ÇÇàÇÒ ÇÊ¿ä´Â ¾ø°í º¹¼öÀÇ
¼Ò½º ÆÄÀϰú Çì´õ ÆÄÀÏÀ» Á¤¸®ÇØ ÇÑ ¹ø¿¡ ÄÄÆÄÀÏ ¹× ÃÖÀûÈÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÄÄÆÄÀÏ·¯´Â º¹¼öÀÇ ÆÄÀÏÀ» ´ë»óÀ¸·Î ºÐ¼®°ú ÃÖÀûȸ¦ ½ÇÇàÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ¿¹¸¦ µé¸é WPO ÀÌ ¾øÀ¸¸é ÄÄÆÄÀÏ·¯´Â 1 °³ÀÇ ÄÄÆÄÀÏ °¡´É ÆÄÀÏ ³»¿¡¼ ¹Û¿¡ ÇÔ¼ö¸¦ ÀÎ ¶óÀÎÈÇÒ ¼ö ¾ø½À´Ï´Ù.
WPO¸¦ »ç¿ëÇϸé ÇÁ·Î±×·¥³»ÀÇ ¾î´À ¼Ò½º ÆÄÀÏÀÇ ÇÔ¼ö¿¡¼µµ ÀÎ ¶óÀÎÈÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌÇÏÀÇ ¿¹¿¡¼´Â ÄÄÆÄÀÏ·¯´Â ÀÎ ¶óÀÎȳª Á¤¼ö ÀüÆÄ µîÀÇ ÃÖÀûȸ¦ º¹¼öÀÇ ÄÄÆÄÀÏ °¡´É ÆÄÀÏ¿¡ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ±× ¿ÜÀÇ ÇÁ·Î½ÃÀú°£ ÃÖÀûȸ¦ ½ÇÇàÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
// Main.cpp
...
MSDNClass ^MSDNObj = gcnew MSDNClass;
int x = MSDNObj->Square(42);
return x;
...
// MSDNClass.cpp
int MSDNClass::Square(int x)
{
return x*x;
}
ÀÌ ¿¹¿¡¼´Â Main.cpp °¡ ´Ù¸¥ ¼Ò½º ÆÄÀÏ¿¡ Æ÷ÇԵǴ MSDNClass
ÀÇ Square ¸Þ¼Òµå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù. /O2 ÃÖÀûȸ¦ »ç¿ëÇØ¿© ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûȸ¦ »ç¿ëÇÏÁö ¾Ê°í ÄÄÆÄÀÏ Çϸé ÀÌÇÏ¿Í °°Àº
MSIL ÀÌ Main.cpp ¿¡ »ý¼ºµË´Ï´Ù.
ldc.i4.s
42
call instance
int32 MSDNClass::Square(int32)
42 °¡ ½ºÅÿ¡
ÀÐÇô ´ÙÀ½¿¡ Square ÇÔ¼ö°¡ È£Ã⠵ǰí ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
ÇÑÆí ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûȸ¦ À¯È¿ÇÏ°Ô ÇØ °°Àº
ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ÇÏ¸é »ý¼ºµÇ´Â MSIL Àº ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.
ldc.i4 0x6e4
42 ¸¦ ÀоîµéÀÏ °Íµµ ¾ø°í ¶Ç Square ÇÔ¼ö¸¦
È£ÃâÇÏ´Â Àϵµ ¾ø½À´Ï´Ù. ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûȸ¦ »ç¿ëÇÏ´Â °ÍÀ¸·Î ÄÄÆÄÀÏ·¯´Â MSDNClass.cpp ÀÇ ÇÔ¼öÀÇ ÀÎ ¶óÀÎÈ¿Í Á¤¼ö ÀüÆÄ¸¦
½ÇÇàÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ±× °á°ú 42*42 ÀÇ ¿¬»ê °á°ú Áï 16 Áø¼öÀÇ 0x6e4 À» ÀоîµéÀÌ´Â ¸í·É¸¸ÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù.
Visual C++ ÄÄÆÄÀÏ·¯°¡ ½ÇÇàÇÏ´Â ºÐ¼®À̳ª ÃÖÀûÈÀÇ ÀϺδ JIT ÄÄÆÄÀÏ·¯°¡
½ÇÇàÇÏ´Â Àϵµ À̷лóÀº °¡´ÉÇÕ´Ï´Ù¸¸ JIT ÄÄÆÄÀÏ·¯¿¡ ºÎ°úµÇ°í ÀÖ´Â ½Ã°£ÀûÀÎ Á¦¾àÀ» À§ÇØ ¿©±â¼
Á¢Çϰí ÀÖ´Â ÃÖÀûÈÀÇ »ó´ç¼ö´Â Çö½ÃÁ¡¿¡¼´Â ±¸Çö ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀϹݷÐÀ¸·Î ¸»Çϸé NGEN °¡ JIT º¸´Ù ¸ÕÀú ÀÌ·¯ÇÑ ÃÖÀûȸ¦ ±¸Çö ÇÑ´Ù°í »ý°¢µË´Ï´Ù. JIT °ú´Â ´Þ¸® NGEN ¿¡´Â ÀÀ´ä ½Ã°£ÀÇ Á¦¾àÀÌ ºÎ°úµÇÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.
64 ºñÆ® NGEN ÀÇ ÃÖÀûÈ
±â»çÀÇ
ÇüÆí»ó Áö±Ý±îÁö´Â JIT NGEN ÀÇ ¾çÂÊ ¸ðµÎ¸¦ Á¤¸®ÇØ JIT ·Î¼ Ãë±ÞÇØ ¿Ô½À´Ï´Ù. 32 ºñÆ®ÀÇ CLR ¿¡¼´Â
JIT ÄÄÆÄÀÏ·¯¿Í NGEN ´Â ¾î´ÀÂÊÀ̳ª °°Àº ÃÖÀûȸ¦ ½ÇÇàÇÕ´Ï´Ù. ±×·¯³ª 64 ºñÆ®ÀÇ CLR ¿¡¼´Â NGEN
Àº JIT º¸´Ù ²Ï ¸¹Àº ÃÖÀûȸ¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
64 ºñÆ® NGEN ´Â JIT ¿Í
ºñ±³ÇÏ¿© ÈξÀ ¸¹Àº ½Ã°£À» ÄÄÆÄÀÏ¿¡ ¼ÒºñÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À̰ÍÀº JIT ÀÇ throughput°¡ ¾îÇø®ÄÉÀ̼ÇÀÇ ÀÀ´ä ¼Óµµ¿¡ Á÷Á¢
¿µÇâÀ» Áֱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ ±â»ç¿¡¼´Â ÁÖ·Î 64 ºñÆ® NGEN ¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ±× ÀÌÀ¯´Â 64 ºñÆ® NGEN ¿¡¼´Â C++
½ºÅ¸ÀÏÀÇ Äڵ忡 ¸ÂÃá Á¶Á¤À» Çϰí ÀÖ¾î ¶Ç Double Thunk
Elimination µî ´Ù¸¥ JIT À̳ª NGEN ¿¡´Â
¾ø´Ù C++ ¿¡ ÀÖ¾î ¸Å¿ì À¯È¿ÇÑ ÃÖÀûȰ¡ ÁغñµÇ¾î Àֱ⠶§¹®ÀÔ´Ï´Ù. 32 ºñÆ® JIT ¹× 64 ºñÆ® JIT ´Â °¢°¢ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®°¡ ´Ù¸¥ ÆÀ¿¡ ÀÇÇØ ´Ù¸¥ ÄÚµå º£À̽º¸¦ ÀÌ¿ëÇØ
±¸Çö µÇ¾ú½À´Ï´Ù. 32 ºñÆ® JIT ÀÇ °³¹ßÀº CLR ÆÀÀÌ ´ã´çÇß½À´Ï´Ù¸¸ 64 ºñÆ® JIT ´Â Visual
C++ ÆÀÀÌ Visual C++ ÄÚµå º£À̽º¸¦ ±âÃʷμ °³¹ßÇß½À´Ï´Ù. 64 ºñÆ® JIT ´Â
Visual C++ ÆÀ¿¡ ÀÇÇØ °³¹ßµÇ¾ú±â ¶§¹®¿¡ C++ ¿Í °ü°èµÇ´Â ¹®Á¦¸¦ º¸´Ù ÀǽÄÇÑ
°ÍÀÌ µÇ°í ÀÖ½À´Ï´Ù.
Double Thunk
Elimination
64 ºñÆ® NGEN ÀÇ
°¡Àå Áß¿äÇÑ ÃÖÀûÈÀÇ 1 °³´Â Double Thunk Elimination À¸·Î ºÒ¸®´Â
°ÍÀÔ´Ï´Ù. /clr ½ºÀÄ¡¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ µÈ C++ ÄÚµåÀÇ °æ¿ì ¸Å´ÏÁö Äڵ尡
ÇÔ¼ö Æ÷ÀÎÅÍ ¶Ç´Â °¡»ó È£ÃâÀ» °³ÀÔ½ÃÄÑ ¸Å´ÏÁö ¿£Æ®¸®
Æ÷ÀÎÆ®¸¦ È£ÃâÇϸé õÀÌ(ôÃì¹)°¡ ¹ß»ýÇÕ´Ï´Ù¸¸ (/clr:pure ¶Ç´Â /clr:safe À» »ç¿ëÇØ ÄÄÆÄÀÏ µÈ Äڵ忡¼´Â ÀÌ ÃµÀÌ´Â
¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù) Double Thunk
Elimination ´Â ÀÌ ÃµÀ̸¦ ó¸®ÇÕ´Ï´Ù. ÀÌ ÃµÀ̰¡ ¹ß»ýÇÏ´Â ÀÌÀ¯´Â ÇÔ¼ö Æ÷ÀÎÅÍ¿Í
°¡»ó È£ÃâÀÌ ÄÝ »çÀÌÆ®ÀÇ ÃæºÐÇÑ Á¤º¸¸¦ °®ÃßÁö ¾Ê±â ¶§¹®¿¡ È£Ãâó°¡ ¸Å´ÏÁö ¿£Æ®¸® Æ÷ÀÎÆ® (MEP) Àΰ¡ ¾ð ¸Å´ÏÁö ¿£Æ®¸® Æ÷ÀÎÆ®
(UEP) Àΰ¡ ¸¦ ÆÇ´ÜÇÒ ¼ö ¾ø´Â °Í¿¡ ÀÖ½À´Ï´Ù.
ÇÏÀ§ ȣȯ¼ºÀ» À¯ÁöÇϱâ À§ÇØ UEP °¡ Ç×»ó ¼±Åõ˴ϴÙ. ±×·¯³ª ¸Å´ÏÁö ÄÝ »çÀÌÆ®°¡
½ÇÁ¦·Î ¸Å´ÏÁö ¸Þ¼Òµå¸¦ È£ÃâÇßÀ» °æ¿ì´Â ¾î¶»°Ô
µÇ´Â °ÍÀϱî¿ä. ÀÌ °æ¿ì ¸Å´ÏÁö ÄÝ »çÀÌÆ®·ÎºÎÅÍ UEP¿¡ÀÇ ÃÖÃÊÀÇ ½éÅ©¿¡ ´õÇØÁ® UEP ·ÎºÎÅÍ ¸ñÀûÀÇ ¸Å´ÏÁö
¸Þ¼Òµå¿¡ÀÇ ¼ÍÅ©°¡ ¹ß»ýÇÕ´Ï´Ù. ÀÌ ¸Å´ÏÁö ÄÚµå·ÎºÎÅÍ ¸Å´ÏÁö
Äڵ忡ÀÇ ¼ÍÅ© ÇÁ·Î¼¼½º´Â ÀϹÝÀûÀ¸·Î ´õºí ¼ÍÅ©·Î
ºÒ¸®°í ÀÖ½À´Ï´Ù.
64 ºñÆ® NGEN ´Â "¾ð
¸Å´ÏÁö ÄÚµå·ÎºÎÅÍ ¸Å´ÏÁö ÄÚµå" ¿¡ÀÇ È£ÃâÀ» ¸Å´ÏÁö
Äڵ忡 ¼ÍÅ© ¹é Çϴ ȣÃâÀ̶ó°í ÀνÄÇÏ´Â °Í¿¡ ÀÇÇØ ÀÌ ´õºí ¼ÍÅ©¸¦ ÃÖÀûÈÇÕ´Ï´Ù. 64 ºñÆ® NGEN ´Â ¼ÍÅ© ¹éÀÌ ¹ß»ýÇϰí ÀÖ´ÂÁö ¾î¶²Áö¸¦ È®ÀÎÇØ ¹ß»ýÇϰí
ÀÖ´Â °æ¿ì´Â ±×¸² 2 ¿¡ ³ªÅ¸³ªµíÀÌ ¾çÂÊ ¸ðµÎÀÇ ¼ÍÅ©¸¦
½ºÅµ ÇØ ¸Å´ÏÁö Äڵ忡 Á÷Á¢ Á¡ÇÁ ÇÕ´Ï´Ù. ÀÌ ±â´É¿¡ ÀÇÇØ ´Ù¼öÀÇ ¸í·ÉÀ» »ý·« ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î
»ç¿ëµÇ°í ÀÖ´Â Äڵ带 ¸ðµ¨·Î ÇÑ º¥Ä¡¸¶Å©¿¡¼´Â ÆÛÆ÷¸Õ½º°¡ 5 ~ 10% Çâ»óÇßÀ½ (ÀΰøÀûÀÎ Å×½ºÆ®¿¡¼´Â 100% À» ³ÑÀº Àûµµ ÀÖ½À´Ï´Ù).

±×¸² 2. Double
Thunk Elimination
´Ù¸¸
ÁÖÀǰ¡ ÇÊ¿äÇÑ °ÍÀº ÀÌ ÃÖÀûÈ´Â ±âÁ¤(既ïÒ)ÀÇ ¾îÇø®ÄÉÀÌ¼Ç µµ¸ÞÀÎ ³»¿¡¼¸¸ ½ÇÇà °¡´ÉÀ̶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù.
±âÁ¤ÀÇ AppDomain À» ÀÌ¿ëÇÏ¸é ÆÛÆ÷¸Õ½º°¡ Çâ»óÇÑ´Ù°í ÇÏ´Â ¿øÄ¢À» ±â¾ïÇØ µÖ ÁÖ¼¼¿ä.
C++ »óÈ£ ¿î¿ë ±â´É
C++ »óÈ£ ¿î¿ë ±â´ÉÀº ¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê ÄÚµåÀÇ »óÈ£ ¿î¿ëÀ» °ü¸®ÇÏ´Â Å×Å©³î·¯ÁöÀÔ´Ï´Ù. ÀÌ Å×Å©³î·¯Áö¿¡ ÀÇÇØ /clr
½ºÀÄ¡¸¦ »ç¿ëÇØ ÄÄÆÄÀÏ µÈ Ç¥ÁØÀÇ C++ ÄÚµå·ÎºÎÅÍ
³×ÀÌÆ¼ºê ÇÔ¼ö¸¦ Á÷Á¢ È£ÃâÇÒ ¼ö°¡ ÀÖ°Ô µË´Ï´Ù. ±×
¶§¿¡ ÇÁ·Î±×·¡¸Ó°¡ Äڵ带 Ãß°¡ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. /clr ½ºÀÄ¡¸¦ »ç¿ëÇØ »ý¼ºµÈ ÄÚµå´Â MSIL µË´Ï´Ù (ÀϺΠ¿¹¿Üµµ ÀÖ½À´Ï´Ù). µ¥ÀÌÅÍ´Â ¸Å´ÏÁö
µ¥ÀÌÅÍ¿¡µµ ¾ð ¸Å´ÏÁö µ¥ÀÌÅͷεµ µÉ ¼ö ÀÖ´Â (À¯Àú°¡
ÁöÁ¤ÇÕ´Ï´Ù). C++ »óÈ£
¿î¿ë ±â´ÉÀº °¡Àå Áß¿äÇÑ .NET ±â´ÉÀÔ´Ï´Ù¸¸ ¿ÏÀüÈ÷¶ó°í ¸»Çصµ
ÁÁÀ» Á¤µµ ¾Ë·ÁÁ® ÀÖÁö ¾Ê½À´Ï´Ù. C++ »óÈ£ ¿î¿ë ±â´ÉÀº Çõ½ÅÀûÀ̶ó°í ÇÒ ¼ö ÀÖÀ» Á¤µµÀÇ ±â´ÉÀ»
Á¦°øÇÕ´Ï´Ù¸¸ ±×°ÍÀÌ ¿Ã¹Ù¸£°Ô ÀÎ½Ä µÉ ¶§±îÁö´Â ´çºÐ°£ ½Ã°£ÀÌ ÇÊ¿äÇÑ °Í °°½À´Ï´Ù.
.NET ¿¡ ÁذÅÇÑ ´Ù¸¥ ¾ð¾î·Î ³×ÀÌÆ¼ºê ÄÚµå¿ÍÀÇ »óÈ£ ¿î¿ëÀ» ½ÇÇöÇÏ·Á¸é DLL ¿¡ native code¸¦ ¹èÄ¡ÇØ dllimport (¶Ç´Â µ¿µîÀÇ °Í. »ç¿ëÇÏ´Â ¾ð¾î¿¡ µû¶ó¼ ´Ù¸¨´Ï´Ù) ¸¦ »ç¿ëÇØ P/Invoke
·Î ¸í½ÃÀûÀ¸·Î ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ±×
ÀÌ¿ÜÀÇ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °æ¿ì´Â ó¸®ÀÇ ¹«°Å¿î COM »óÈ£ ¿î¿ë ±â´ÉÀ» »ç¿ëÇØ native code¿¡ ¾×¼¼½º ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. À̰ÍÀº ºÐ¸íÇϰÔ
ºÒÆíÇÑ ¹æ¹ýÀÌ¸ç ¸¹Àº °æ¿ì C++ ¿Í ºñ±³ÇØ ÆÛÆ÷¸Õ½º°¡
Å©°Ô µÚ¶³¾îÁý´Ï´Ù.
C++ »óÈ£ ¿î¿ë ±â´ÉÀº C++ ¾ð¾îÀÇ ÆÛÆ÷¸Õ½º Çâ»ó ±â´ÉÀ¸·Î¼ Åë»óÀº º¸¿©Áö°í ÀÖÁö ¾Ê½À´Ï´Ù. ±×·¯³ª
C++ »óÈ£ ¿î¿ë ±â´ÉÀÌ Á¦°øÇÏ´Â À¯¿¬¼º°ú Æí¸®¼º¿¡ ÀÇÇØ CLR ¸¦ Ÿ°ÙÀ¸·Î ÇÏ´Â °ÍÀ¸·Î ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÜÀÏ À̹ÌÁö³»ÀÇ ³×ÀÌÆ¼ºê
ÄÚµå¿Í ¸Å´ÏÁö ÄÚµå
Visual C++ ¿¡¼´Â ¸Å´ÏÁö ÄÚµå·Î ÇÏ´Â ÇÔ¼ö¿Í
³×ÀÌÆ¼ºê ÄÚµå·Î ÇÏ´Â ÇÔ¼ö¸¦ ÇÁ·Î±×·¡¸Ó°¡ °³°³¿¡ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¼±ÅÃÀ» ½Ç½ÃÇÏ·Á¸é #pragma
managed ¶ó´Â #pragma
unmanaged ¸¦ »ç¿ëÇÕ´Ï´Ù. ¿¹¸¦
±×¸² 3¿¡
³ªÅ¸³À´Ï´Ù. ¾î·Á¿î ÄÄÇ»ÅÍ Å½ºÅ©¸¦ ½ÇÇàÇÏ´Â °æ¿ì ÄÚ¾î ÇÔ¼ö¸¦ ³×ÀÌÆ¼ºê ÄÄÆÄÀÏ ÇØ ´Ù¸¥ Äڵ带 ¸Å´ÏÁö ÄÄÆÄÀÏ ÇÏ´Â °ÍÀÌ
¹Ù¶÷Á÷ÇÑ ÀÏÀÌ ÀÖ½À´Ï´Ù. C++ ¿¡¼´Â ´ÜÀÏÀÇ À̹ÌÁö ³»¿¡ ¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê Äڵ带 È¥Àç½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù. ³×ÀÌÆ¼ºê ÇÔ¼ö·ÎºÎÅÍ ¸Å´ÏÁö
ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °æ¿ì(¶Ç´Â ±× ¿ªÀÇ °æ¿ì) Ưº°ÇÑ ±¸¹®À»
±â¼úÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. C++ ¿¡¼ ÀÌ·¯ÇÑ ¼¶¼¼ÇÔ¿¡ ÀÇÇØ ¸Å´ÏÁö ÄÚµå·ÎºÎÅÍ ³×ÀÌÆ¼ºê Äڵ忡ÀÇ ÃµÀÌ , ¹× ³×ÀÌÆ¼ºê ÄÚµå·ÎºÎÅÍ ¸Å´ÏÁö Äڵ忡ÀÇ ÃµÀ̸¦ ¿ëÀÌÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸Å´ÏÁö ÄÚµå·ÎºÎÅÍ ³×ÀÌÆ¼ºê
Äڵ忡 õÀÌ ÇÏ´Â °æ¿ì(¶Ç´Â ±× ¿ªÀÇ °æ¿ì) ÄÄÆÄÀÏ·¯
¹× ¸µÄ¿¿¡ ÀÇÇÑ ¼ÍÅ©ÀÇ »ý¼ºÀÌ ½ÇÇà Ç÷ο쿡 Æ÷ÇÔµÇ°Ô µË´Ï´Ù. ´ç¿¬ÇÑ ÀÏÀÔ´Ï´Ù¸¸ ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ
¼ÍÅ©ÀÇ »ý¼º¿¡ ÀÇÇÑ ÄÚ½ºÆ®¸¦ ȸÇÇÇÏ°í ½Í´Ù°í »ý°¢ÇÕ´Ï´Ù. CLR °ú ÄÄÆÄÀÏ·¯´Â õÀÌÀÇ ÄÚ½ºÆ®¸¦ ÃÖ¼ÒÇÑÀ¸·Î ¾ïÁ¦Çϱâ À§ÇØ
´Ù¼öÀÇ Ã³¸®¸¦ ½ÇÇàÇÕ´Ï´Ù¸¸ °³¹ßÀÚÀÇ ÂÊ¿¡¼ õÀÌÀÇ ¹ß»ý ºóµµ¸¦ ÃÖ¼ÒÈÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
±×¸² 4ÀÇ ÆÄÆ® A ¿¡
³ªÅ¸³»´Â C++ ¾îÇø®ÄÉÀ̼ÇÀº ÀϺÎÀÇ ÄÚµå (Z.cpp) °¡ (/clr
¸¦ »ç¿ëÇØ) MSIL ±×¸®°í ´Ù¸¥ ÄÚµå (X.cpp ¿Í Y.cpp)
°¡ ³×ÀÌÆ¼ºê Äڵ忡 ÄÄÆÄÀÏ µÇ°í ÀÖ½À´Ï´Ù. ÀÌ
ÇÁ·Î±×·¥ÀÇ Y.cpp °ú Z.cpp ¿¡´Â
º¹¼öÀÇ ÇÔ¼ö°¡ Æ÷ÇԵǾî ÀÖ¾î ¼·Î ´Ù¼öÀÇ È£ÃâÀ» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù. ±× °á°ú ¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê ÄÚµåÀÇ ÃµÀ̰¡ ´Ù¼ö ¹ß»ýÇϰí
ÀÖ¾î ÇÁ·Î±×·¥ÀÇ ½ÇÇà ¼Óµµ¸¦ ÀúÇϽÃ۰í ÀÖ½À´Ï´Ù.

±×¸² 4. Changing
Managed Boundaries
±×¸² 4. ÀÇ ÆÄÆ® B ´Â
ÀÌ ÇÁ·Î±×·¥À» ÃÖÀûÈÇØ ¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê
ÄÚµåÀÇ ÃµÀ̸¦ ÃÖ¼ÒÈÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. À̰ÍÀº »óÈ£ È£ÃâÀÌ ´Ù¼ö ¹ß»ýÇϰí ÀÖ´Â ÀÎÅÍÆäÀ̽º¸¦
ƯÁ¤ÇØ À̰͵éÀ» ¸Å´ÏÁö ¿µ¿ª ¶Ç´Â ³×ÀÌÆ¼ºê ¿µ¿ªÀÇ
¾î´À ÂÊÀΰ¡¿¡ Á¤¸®ÇØ À̵¿ÇÏ´Â °ÍÀ¸·Î ÀÎÅÍÆäÀ̽º°£¿¡ ºó¹øÇÏ°Ô ¹ß»ýÇϴ õÀ̸¦ Á¦°ÅÇÑ´Ù°í ÇÏ´Â »ý°¢¿¡ ±Ù°ÅÇϰí ÀÖ½À´Ï´Ù. Visual C++ ÀÇ »óÈ£
¿î¿ë ±â´ÉÀ» »ç¿ëÇϸé ÀÌ
ŽºÅ©¸¦ °£´ÜÇÏ°Ô ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¹¸¦ µé¸é ,±×¸² 4. ÀÇ A À¸·ÎºÎÅÍ B ·Î ±¸¼ºÀ» º¯°æÇÏ·Á¸é /clr ½ºÀÄ¡¸¦ »ç¿ëÇØ Y.cpp ¸¦
ÀçÄÄÆÄÀÏ ÇÒ »ÓÀÔ´Ï´Ù. Y.cpp
Àº ¸Å´ÏÁö Äڵ忡 ÄÄÆÄÀÏ µÇ¾î Z.cpp ·ÎºÎÅÍ
ÀÇ È£Ãâ¿¡ ¼ö¹ÝÇÏ´Â ¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê ÄÚµåÀÇ
õÀÌÀÇ ÄÚ½ºÆ®´Â ¾ø¾îÁý´Ï´Ù. ¹°·Ð
Y.cpp ÀÌ MSIL °¡ µÇ´Â °ÍÀÇ ÆÛÆ÷¸Õ½º ÄÚ½ºÆ®µµ °í·ÁÇØ ÀÌ·¯ÇÑ ±¸¼º º¯°æÀÌ
¾îÇø®ÄÉÀ̼ǿ¡ ÀÖ¾î Ÿ´çÇÑ Æ®·¹ÀÌµå ¿ÀÇÁÀÎ °ÍÀ» È®ÀÎÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
°í ÆÛÆ÷¸Õ½º
¸¶¼£¸µ
¸Å´ÏÁö ÄÚµå¿Í ³×ÀÌÆ¼ºê
ÄÚµåÀÇ »óÈ£ ¿î¿ë°ú °ü°èµÇ´Â ó¸® Áß¿¡¼ °¡Àå ÄÚ½ºÆ®ÀÇ ºñ½Ñ ó¸®ÀÇ 1 °³°¡ ¸¶¼£¸µÀÔ´Ï´Ù. C# À̳ª Visual
Basic .NET µîÀÇ ¾ð¾îÀÇ °æ¿ì ¸¶¼£¸µÀº (±âÁ¤ÀÇ ¸¶»þ·¯ ¶Ç´Â ICustomMarshaler À» ±¸ÇöÇÏ´Â °æ¿ì¿¡´Â Ä¿½ºÅÒ
¸¶¼£¸µ Äڵ带 »ç¿ëÇØ) P/Invoke °¡ ºÒ·Á °¬À»
¶§¿¡ CLR ¿¡ ÀÇÇØ ¾Ï¹¬ÀûÀ¸·Î ½ÇÇàµË´Ï´Ù. C++ »óÈ£ ¿î¿ë ±â´ÉÀ» »ç¿ëÇϸé
ÇÁ·Î±×·¡¸Ó°¡ Çʿ信 µû¶ó¼ Äڵ峻ÀÇ µ¥ÀÌÅ͸¦ ¸í½ÃÀûÀ¸·Î
¸¶¼È ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀÇ ÀåÁ¡Àº ÇÁ·Î±×·¡¸Ó°¡ µ¥ÀÌÅ͸¦ ³×ÀÌÆ¼ºê
µ¥ÀÌÅÍ¿¡ ÇÑ ¹ø ¸¶¼È ÇÏ´Â °Í¸¸À¸·Î ÀÌ ¸¶¼£¸µ µ¥ÀÌÅÍÀÇ °á°ú¸¦ º¹¼öÀÇ È£Ãâ·Î Àç ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÇ±â ¶§¹®¿¡ ¸¶¼£¸µÀÇ ÄÚ½ºÆ®¸¦ ¸Þ¿ï ¼ö°¡ ÀÖ´Ù°í ÇÏ´Â Á¡¿¡ ÀÖ½À´Ï´Ù.
±×¸² 5 Àº /clr ½ºÀÄ¡¸¦
»ç¿ëÇØ ÄÄÆÄÀÏ µÈ ½º´ÏÆêÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ÀÌ
Äڵ忡´Â for ·çÇÁ°¡ 1 °³ Æ÷ÇԵǾî ÀÖ¾î ±× ³»ºÎ¿¡¼
³×ÀÌÆ¼ºê ÇÔ¼ö (GetChar)
°¡ ºÒ·Á °¡°í ÀÖ½À´Ï´Ù. ±×¸² 6 ¿¡¼´Â
°°Àº Äڵ尡 C# ·Î ½ÇÀåµÇ°í ÀÖ½À´Ï´Ù. ±×°÷¿¡¼´Â ÀÌÇÏ¿¡ ³ªÅ¸³»µíÀÌ GetChar ÀÇ
È£Ãâ¿¡ ÀÇÇØ CSharpType Ŭ·¡½º°¡ NativeType ¿¡ ¸¶¼È µÇ°í ÀÖ½À´Ï´Ù.
class NATIVECODE_API NativeType
{
public:
NativeType();
int pos;
int length;
char *theString;
};
C++ ¿¡¼ À¯Àú°¡ ¸í½ÃÀûÀ¸·Î ³×ÀÌÆ¼ºêÇüÀ» »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾Ï¹¬ÀûÀÎ ¸¶¼£¸µÀº ÇÊ¿ä ¾ø½À´Ï´Ù. ÀÌ ÃÖÀûÈ¿¡ ÀÇÇØ ÄÚ½ºÆ®¸¦ Å« ÆøÀ¸·Î
»è°¨ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹¿¡¼´Â C++ ÀÇ ±¸ÇöÀº C# ÀÇ ±¸Çö°ú ºñ±³ÇØ 18 ¹è °í¼ÓÀ¸·Î ½ÇÇàµË´Ï´Ù.
.NET ÇüŸ¦ »ç¿ëÇÑ ÅÛÇø´°ú STL
Visual C++ 2005 ¿¡ »õ·Ó°Ô µµÀÔµÈ ÆÛÆ÷¸Õ½º ±â´É
Áß¿¡¼µµ ƯÈ÷ Èï¹Ì·Î¿î °ÍÀ¸·Î¼ ¸Å´ÏÁöÇüÀ» »ç¿ëÇÑ ÅÛÇø´
(STL/CLI À» Æ÷ÇÔÇÑ) ¸Å´ÏÁö Äڵ忡
ÀÇÇÑ ÇÁ·Î±×·¥ ÀüüÀÇ ÃÖÀûÈ Áö¿¬ Àоîµé¿©±â Deterministic Finalization °¡
ÀÖ½À´Ï´Ù. Visual C++ .NET 2003 ¿¡¼´Â ³×ÀÌÆ¼ºêÇü
ÅÛÇø´ÀÇ MSIL À» »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸ ¸Å´ÏÁöÇüÀ» ÅÛÇø´ÀÇ
ÆÄ¶ó¹ÌÅÍÇüÀ¸·Î¼ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. Visual C++
2005 ¿¡¼ ÀÌ Á¡¿¡ ´ëÇØ ¼öÁ¤À» Çϰí ÀÖ¾î ÅÛÇø´¿¡ ¸Å´ÏÁöÇü ¶Ç´Â ¾ð ¸Å´ÏÁöÇüÀ» ÆÄ¶ó¹ÌÅͷμ Æ÷ÇÔÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÇöÀç´Â ÅÛÇø´¿¡ ÀÇÇØ Á¦°øµÇ´Â ÈǸ¢ÇÑ ±â´ÉÀ» .NET ¾È¿¡¼
±â¼úµÈ ÄÚµå·ÎºÎÅÍ ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù (Blitz++ ³ª Boost ¶óÀ̺귯¸®¿¡ ÀÇÇØ µÈ ½ÇÀû¿¡ ´ëÇØ¼µµ ´ëÃæ ÈȾ´Â °ÍÀ» ÀØÁö ¸»¾Æ ÁÖ¼¼¿ä).
C++ ÀÇ STL (Standard Template Library) ´Â ¶óÀ̺귯¸® ¼³°è¿¡ ÀÖ¾î¼ÀÇ
°¡Àå Áß¿äÇÑ À̳뺣À̼Ç(innovation)ÀÇ 1 °³ÀÔ´Ï´Ù. STLÀÌ Á¦°øÇÏ´Â ´Ù¼öÀÇ
ÄÁÅ×À̳ʳª ¾Ë°í¸®ÁòÀÌ ¶Ù¾î³ Ãß»óȸ¦ ÆÛÆ÷¸Õ½º¿¡ ¿µÇâÀ»
ÁÖ´Â ÀÏ ¾øÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Visual C++ .NET 2003¿¡¼ ÅÛÇø´¿¡ ÀÖ¾î¼ÀÇ
Á¦¾àÀ» À§ÇØ ¸Å´ÏÁöÇü¿¡ ´ëÇØ¼´Â STL µ¿µîÀÇ ¶óÀ̺귯¸®´Â ¾ø¾ú½À´Ï´Ù. Visual C++ 2005 ¿¡¼´Â
ÀÌ Á¦¾àÀÌ Á¦°ÅµÇ¾îSTL/CLI ·Î ºÒ¸®´Â ¶óÀ̺귯¸®°¡
µµÀԵǰí ÀÖ½À´Ï´Ù. À̰ÍÀº STL ÀÇ °ËÁõ °¡´ÉÇÑ ¹öÁ¯ÀÌ¸ç ¸Å´ÏÁöÇüÀ» Ãë±ÞÇÒ
¼ö°¡ ÀÖ½À´Ï´Ù. .NET ¿¡ óÀ½À¸·Î ÄÁÅ×À̳ʸ¦ Á¦°øÇÑ °ÍÀº ±âº» Ŭ·¡½º ¶óÀ̺귯¸®(BCL) ÀÔ´Ï´Ù¸¸ Visual C++ ±×·ìÀº STL/CLI ÀÇ ÆÛÆ÷¸Õ½º°¡ ¿ì¼öÇÏ´Ù°í »ý°¢Çϰí ÀÖ½À´Ï´Ù. STL/CLI ÀÇ »ó¼¼ÇÑ
°Í¿¡ ´ëÇÏ¿©´Â Visual C++ Developer Center ¿¡ °ÔÀçµÇ°í ÀÖ´Â Stan Lippman ÀÇ ÈǸ¢ÇÑ ±â»ç ¡¸STL.NET Primer¡¹(¿µ¾î) ¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
STL/CLI ¸¦ ÀÌ¿ëÇϸé STL
ÀÇ vector,list,deque,map,set,hash
map,hash set µî À» ÀÚÀ¯·Ó°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ¼ÒÆ® , °Ë»ö , ÁýÇÕ Á¶ÀÛ , ³»Àû , Àü
¿ä¼Ò °¡»ê µîÀÇ ¾Ë°í¸®Áòµµ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. STL/CLI ÀÇ ¾Ë°í¸®Áò¿¡ °üÇØ¼ Çϳª ³î¶ó°Ô ÇÏ´Â °ÍÀº ³×ÀÌÆ¼ºê ¹öÁ¯°ú STL/CLI ¹öÁ¯À¸·Î °°Àº ±¸ÇöÀÌ Ã¤¿ëµÇ°í ÀÖ´Â °ÍÀÔ´Ï´Ù. STL ÀÌ ¶Ù¾î³ ¼³°è¿¡
ÀÇÇØ À̽ļºÀÌ ³ô°í ÆÄ¿öÇ®ÇÑ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù°í
ÇÏ´Â ÇüÅ·Π¸ðµç ÇÁ·Î±×·¡¸Ó°¡ ÇýÅÃÀ» ¹Þ½À´Ï´Ù.
°áÁ¤·Ð¿¡ ÀÇÇÑ ÆÛÆ÷¸Õ½ºÀÇ
Çâ»ó
C++ ÀÌ ¶Ù¾î³ ¶óÀ̺귯¸®¿¡´Â ´Ù¾çÇÑ ÆÐÅÏÀ̳ª °ü¿ë¾î¸¦ °¡Áö°í
ÀÖ¾î À̰͵éÀ» ÀÚÀ¯·Ó°Ô »ç¿ëÇÏ´Â °ÍÀ¸·Î È¿À²ÀûÀÎ Äڵ带 ¿ëÀÌÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. RAII (Resource Acquisition Is
Initialization)¸¦ Æ÷ÇÔÇØ ÀÌ·¯ÇÑ ÆÐÅÏÀ̳ª °ü¿ë¾îÀÇ »ó´ç¼ö´Â Deterministic
Finalization À¸·Î ºÒ¸®´Â C++ ¾ð¾îÀÇ
±â´ÉÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. Deterministic Finalization ÀÇ ±âº» ±â´ÉÀº ¿ÀºêÁ§Æ®°¡ delete ¿¬»êÀÚ¿¡ ÀÇÇØ »èÁ¦µÇ¾úÀ» ¶§ (heap¿¡ ¹èÄ¡µÈ ¿ÀºêÁ§Æ®ÀÇ
°æ¿ì) ¶Ç´Â ¿ÀºêÁ§Æ®°¡ ½ºÄÚÇÁÀÇ ¹Û¿¡ ³ª¿ÔÀ» ¶§ (½ºÅÿ¡ ¹èÄ¡µÈ ¿ÀºêÁ§Æ®ÀÇ °æ¿ì)¿¡ ¿ÀºêÁ§Æ®ÀÇ ¼Ò¸êÀÚ¸¦ ±âµ¿ÇÏ´Â °ÍÀÔ´Ï´Ù. Deterministic
Finalization Àº ÆÛÆ÷¸Õ½ºÀÇ Çâ»ó¿¡ µµ¿òÀÌ µË´Ï´Ù. ¿ÀºêÁ§Æ®°¡ (Àý´ëÀûÀ¸·Î ÇÊ¿äÇÑ ¹üÀ§¸¦ ³Ñ¾î) ÀÚ¿øÀ» ±æ°Ô º¸°ü À¯ÁöÇϸé ÇÒ¼ö·Ï ´Ù¸¥ ¿ÀºêÁ§Æ®°¡ °°Àº ÀÚ¿øÀ» ÃëµæÇÏ·Á°í ÇßÀ» ¶§ÀÇ ÆÛÆ÷¸Õ½º ÀúÇϰ¡ °Ý·ÄÇØÁö±â ¶§¹®ÀÔ´Ï´Ù.
CLR ÆÄÀ̳θ®Àú¸¦ »ç¿ëÇÏ¸é ¿ÀºêÁ§Æ®°¡ ½ºÄÚÇÁÀÇ ¹Û¿¡ ³ª¿Â Èİ¡ ÀÖ´Â ½ÃÁ¡¿¡¼ ÆÄÀ̳θ®Àú Äڵ尡
½ÇÇàµË´Ï´Ù (¶ôÀ» ÇØ¹æÇÏ´Â Äڵ尡 ÆÄÀ̳θ®Àú¶ó°í °¡Á¤Çϰí ÀÖ½À´Ï´Ù). ´Ù¸¸ ÆÄÀ̳¯Á¦·¹ÀÌ¼Ç thread°¡ ¿ÀºêÁ§Æ®ÀÇ ÆÄÀ̳θ®Àú¿¡ ´ëÇØ¼ ±âµ¿µÇ±â Àü¿¡ ½ÇÇàµÉ °ÍÀº ¾ø½À´Ï´Ù. À̰ÍÀº
ºÐ¸íÇÏ°Ô ÃÖÀûÀÎ µ¿ÀÛÀ̶ó°í´Â ¸»ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇÁ·Î±×·¡¸Ó°¡ ¿¹±â ÇÑ Å¸Àֿ̹¡ ÆÄÀ̳¯Á¦·¹ÀÌ¼Ç thread°¡ ½ÇÇàµÈ´Ù°í´Â ÇÒ ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù. °Ô´Ù°¡ ÆÄÀ̳θ®Àú°¡ ½ÇÇàµÇ±â Àü¿¡ ¿ÀºêÁ§Æ®ÀÇ º¸°ü À¯ÁöÇϰí
ÀÖ´ø ¸Þ¸ð¸®°¡ °¡º£Áö Ä÷ºÆ® µÉ °ÍÀº ¾ø½À´Ï´Ù. À̰ÍÀº ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â ¸Þ¸ð¸®ÀÇ Áõ°¡·Î ¿¬°áµË´Ï´Ù.
.NET º£À̽ºÀÇ ÄÚµå·Î ÀÌ ¹®Á¦¸¦ ȸÇÇÇÏ´Â ÀϹÝÀûÀÎ °ü¿ë¾îÀÇ
Çϳª·Î Dispose ÆÐÅÏÀÌ
ÀÖ½À´Ï´Ù. Dispose ÆÐÅÏÀ» »ç¿ëÇÏ·Á¸é Ŭ·¡½º¿¡ Dispose ¸Þ¼Òµå¸¦ ½ÇÀåÇØ ¿ÀºêÁ§Æ®°¡ ºÒÇÊ¿äÇÏ°Ô µÇ¾úÀ» ¶§¿¡ ±× ¸Þ¼Òµå¸¦ È£ÃâÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå°¡ ºÒ·Á °¡´Â Äڵ峻ÀÇ Àå¼Ò´Â C++ ÇÁ·Î±×·¡¸Ó°¡ ¿ÀºêÁ§Æ®ÀÇ
»èÁ¦¸¦ ½ÇÇàÇÏ´Â Àå¼Ò¿Í °°½À´Ï´Ù. ±×·¯³ª C++ ¿¡ ÀÖ¾ú¾î
Á¶Â÷ ÀÌ·¯ÇÑ Ã³¸®´Â ¿¡·¯ÀÇ ¹ß»ýÀ¸·Î ¿¬°áµÇ±â ½±°í , Äڵ尡 ¸Å¿ì ÀåȲÇÏ°Ô µË´Ï´Ù. C# µîÀÇ ¾ð¾î¿¡¼´Â
"using" ÄÁ½ºÆ®·¡Æ®°¡ Ãß°¡µÇ°í ÀÖ¾î ¿¡·¯ÀÇ ¹ß»ýÀ̳ª ÀåȲÇÑ
±â¼úÀÇ È¸ÇÇ¿¡ µµ¿òÀÌ µË´Ï´Ù. ´Ù¸¸ Áß¿äÇÑ ÄÉÀ̽º¿¡¼´Â ¿ª½Ã ±â¼úÀÌ º¹ÀâÀÌ µÇ¾î ¿¡·¯ÀÇ ¿øÀÎÀ¸·Îµµ µË´Ï´Ù.
ÀÌ·¯ÇÑ ¹æ¹ý°ú´Â ´Þ¶ó C++ ÀÇ
RAII °ü¿ë¾î´Â ÀÚ¿øÀÇ Ãëµæ°ú ÇØ¹æÀ» ÀÚµ¿ÀûÀ¸·Î ½Ç½ÃÇÕ´Ï´Ù. ±×¸®°í ÇÁ·Î±×·¡¸Ó°¡ Äڵ带
Ãß°¡ÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡ ¿¡·¯°¡ ¹ß»ýÇÒ °¡´É¼ºµµ ³·¾ÆÁý´Ï´Ù. Visual C++ .NET 2003
¿¡¼´Â ½ºÅÿ¡ ¹èÄ¡µÈ .NET ¿ÀºêÁ§Æ®ÀÇ
Deterministic Finalization Àº ¼Æ÷Æ®µÇ°í
ÀÖÁö ¾Ê¾Ò½À´Ï´Ù¸¸ Visual C++ 2005 ¿¡¼´Â ÀÌ ±â´ÉÀÌ ¼Æ÷Æ®µÇ°í ÀÖ½À´Ï´Ù.
±×¸² 7ÀÇ
Àü¹ÝÀÇ ÄÚµå·Î Socket_t ÇüÅÂÀÇ ¿ÀºêÁ§Æ®°¡ ½ºÅà º£À̽ºÀÇ ±¸¹®À» »ç¿ëÇØ ±×¸®°í ½ºÅà º£À̽ºÀÇ Å¬¸° ¾÷ ½Ã¸àƽ½º¸¦ °®Ãß´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. 3 Çà°¿¡¼ ¿¹¿Ü°¡ ½½·Î¿ì
µÇ¾úÀ» °æ¿ì´Â ¾î¶»°Ô µÇ´Â °ÍÀϱî¿ä. ½ºÅà º£À̽ºÀÇ
½Ã¸àƽ½º°¡ »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ mainSock ÀÇ ¼Ò¸êÀÚ°¡ È®Á¤ÀûÀ¸·Î ½ÇÇàµË´Ï´Ù. ´Ù¸¸ ,backupSock ÀÌ ¾ÆÁ÷ ½ºÅÃ»ó¿¡ ÀÛ¼ºµÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡ ÆÄ±âµÇ´Â ¿ÀºêÁ§Æ®´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ ¿¹¿Í ÀǹÌÀûÀ¸·Î µî°¡ÀÎ Äڵ带 C# ·Î ÀÛ¼ºÇÏ¸é ±×¸² 7 ÀÇ
ÈĹݿ¡ °¡¸®Å°µíÀÌ ±â¼úÀÌ ¾à°£ º¹ÀâÀÌ µÇ¾î ¿¡·¯·Î ¿¬°áµÇ±â ½¬¿öÁý´Ï´Ù.
À̰ÍÀº »ç¼ÒÇÑ ¿¹¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù¸¸ ŽºÅ©°¡ º¹ÀâÇÏ°Ô µÇ´Â °Í¿¡ µû¶ó ½Ç¼ö¸¦ ¹üÇÒ °¡´É¼ºÀÌ ³ô¾ÆÁý´Ï´Ù.
Áö¿¬ Àбâ
.NET Framework ¿¡¼´Â ÆÛÆ÷¸Õ½ºÀÇ Á¶Á¤À» Çϰí ÀÖ½À´Ï´Ù¸¸ CLR ÀÌ ÀÐÈ÷´Â ±âµ¿½Ã¿¡ ¾à°£ÀÇ Áö¿¬ÀÌ ¹ß»ýÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀÌ ¸¹°Ô´Â ¸Å´ÏÁö Äڵ尡 ¾ø´Â ÄÚµå ÆÐ½º³ª ½Ã³ª¸®¿À°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ÀÌ
°æÇâÀº ±âÁ¸ÀÇ ·¹°¡½Ã ÇÁ·Î±×·¥¿¡ .NET ±â´ÉÀ» Â¥³Ö´Â °æ¿ì¿¡ ƯÈ÷ ÇöÀúÇÕ´Ï´Ù. ÀÌ·¯ÇÑ È¯°æ¿¡¼´Â CLR ÀÇ Àоîµé¿©¿¡ °ü·ÃÇÏ´Â ¾îÇø®ÄÉÀÌ¼Ç ±âµ¿½ÃÀÇ Áö¿¬À» ȸÇÇÇÒ
Çʿ䰡 ÀÖ½À´Ï´Ù. DLL ÀÇ
Áö¿¬ Àбâ·Î ºÒ¸®´Â Visual C++ ÀÇ ±âÁ¸ÀÇ ±â´ÉÀ» »ç¿ëÇÏ´Â °ÍÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö
ÀÖ½À´Ï´Ù.
À̰ÍÀº ½ÇÁ¦·Î »ç¿ëÇÒ °æ¿ì¿¡ óÀ½ DLL À» ÀоîµéÀδٰí ÇÏ´Â »ý°¢¿¡ ±Ù°ÅÇϰí ÀÖ½À´Ï´Ù. .NET ¾î¼Àºí¸®ÀÇ DLL À» ÀоîµéÀÌ´Â °æ¿ì¿¡µµ °°Àº °³³äÀ» Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸µÄ¿ ¿É¼Ç /DELAYLOAD:dll ¿¡ Áö¿¬ Àд .NET ¾î¼Àºí¸®¸¦
ÁöÁ¤Çϸé ÁöÁ¤ÇÑ .NET ¾î¼Àºí¸® »Ó¸¸ÀÌ ¾Æ´Ï¶ó CLR ÀÇ
Àб⵵ Áö¿¬ ½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù (¸ðµç .NET ¾î¼Àºí¸®°¡
Áö¿¬ ÀоîµéÀÌ°Ô µÇ´Â °æ¿ì). ±× °á°ú ³×ÀÌÆ¼ºê ¾îÇø®ÄÉÀ̼ǰú µ¿ÀÏÇÑ Á¤µµÀÇ ¼Óµµ·Î ±âµ¿ÇÒ ¼ö ÀÖ°Ô µÇ¾î ¸Å´ÏÁö ¾îÇø®ÄÉÀ̼ǿ¡ °üÇÑ
°¡Àå ÀϹÝÀûÀÎ ºÒ¸¸ÀÇ 1 °³°¡ ÇØ¼ÒµÇ°Ô µË´Ï´Ù.
dllexport °¡ Ç×»ó À¯¸®ÇÑ °èÃ¥À̶ó°í´Â ÇÒ ¼ö ¾ø´Â ÀÌÀ¯
__declspec(dllexport)
¸¦ »ç¿ëÇÏ´Â °Í¿¡´Â ¸î°³ÀÇ °áÁ¡ÀÌ
ÀÖ½À´Ï´Ù. dllexport ¿¡ °üÇÑ ¹®Á¦°¡ ¹ß»ýÇÏ´Â °ÍÀº ¸Å´ÏÁö ÄÚµå·Î
ÀÛ¼ºµÈ 2 °³ÀÇ À̹ÌÁö (DLL ¶Ç´Â exe) ÀÌ #using ÀÌ ¾Æ´Ñ dllexport
¸¦ °³ÀÔ½ÃÄÑ ±â´ÉÀ» °ø°³Çϰí ÀÖ´Â °æ¿ìÀÔ´Ï´Ù. dllexport ´Â ³×ÀÌÆ¼ºê ÄÁ½ºÆ®·¢Æ®À̱⠶§¹®¿¡ __declspec(dllexport)
¸¦ °³ÀÔ½ÃÄÑ DLL ÀÇ °æ°è¸¦ ³ÑÀº È£ÃâÀÌ
¹ß»ýÇÒ ¶§¸¶´Ù ¿ì¼± ¸Å´ÏÁö ÄÚµå·ÎºÎÅÍ ³×ÀÌÆ¼ºê
Äڵ忡ÀÇ ÃµÀ̰¡ °è¼ÓµÇ¾î ³×ÀÌÆ¼ºê ÄÚµå·ÎºÎÅÍ ¸Å´ÏÁö
Äڵ忡ÀÇ ÃµÀ̰¡ »ý±é´Ï´Ù. À̰ÍÀº ÆÛÆ÷¸Õ½ºÀÇ ¾ÇÈ·Î
¿¬°áµË´Ï´Ù.
ÀÌ ÆÛÆ÷¸Õ½ºÀÇ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¿É¼ÇÀº ÇÑÁ¤µÇ¾î ÀÖ½À´Ï´Ù. __declspec(dllexport) ¸¦ ´Ü¼øÇÑ "½ºÀÄ¡" ·Î µ¹¿¬ ¹Ù²Ù¾î
¸Å´ÏÁö
Äڵ忡ÀÇ ¼ÍÅ©¸¦ ¹ß»ý½ÃŰÁö ¾Ê´Â ÄÁ½ºÆ®·¢Æ®·Î º¯È¯ÇÏ´Â
ÀÏÀº ÇÒ ¼ö ¾ø½À´Ï´Ù. Ãßõ µÇ´Â ÇØ°áÃ¥Àº export µÇ´Â ±â´ÉÀ» ¸Å´ÏÁöÇü (ÂüÁ¶ÇüÀÇ class ¶Ç´Â °ª ÇüÀÇ struct)
À¸·Î ·¦ ÇÏ´Â °ÍÀÔ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ ÀÓÆ÷ÅÍ´Â "#using" À» °³ÀÔ½ÃÄÑ export DLL ¿¡ ¾×¼¼½º ÇØ Á÷Á¢ DLL ÀÇ ±â´ÉÀ» ÀÌ¿ëÇÒ
¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌ¿Í °°ÀÌ º¯°æÇÏ´Â °ÍÀ¸·Î ¸Å´ÏÁö
Ŭ¶óÀÌ¾ðÆ®°¡ ¸Å´ÏÁö Äڵ带 È£ÃâÇØµµ õÀ̰¡ ¹ß»ýÇÏÁö ¾Ê°Ô µË´Ï´Ù. ÀÌ ±¸Á¶¸¦ ±×¸² 8 ¿¡ ³ªÅ¸³À´Ï´Ù. ÆÄÆ® A ´Â __declspec(dllexport) ÀÇ »ç¿ë¿¡
¼ö¹ÝÇÏ´Â ÄÚ½ºÆ®¸¦ ³ªÅ¸³»°í ÀÖ¾î ÆÄÆ® B ´Â .NET ÇüÅ¿¡
ÀÇÇÑ ÇÔ¼öÀÇ ·¦Çΰú #using ¸¦ »ç¿ëÇÑ ÃÖÀûÈÀÇ °á°ú¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ´Ù¸¸ ÀÌ ¹æ¹ý¿¡´Â export DLL ÀÇ ¾ð ¸Å´ÏÁö ÀÓÆ÷ÅͰ¡ DLL ÀÇ
±â´ÉÀ» __declspec(dllimport)
ÇÒ ¼ö ¾ø´Ù°í ÇÏ´Â ÀáÀçÀûÀÎ ¹®Á¦°¡ ¼ö¹ÝÇÕ´Ï´Ù. º¯°æÀ» ½Ç½ÃÇÏ´Â °æ¿ì¿¡´Â ÀÌ Á¡¿¡ ´ëÇØ °í·ÁÇÒ
Çʿ䰡 ÀÖ½À´Ï´Ù.

±×¸² 8. ¼ÍÅ© ÄÚ½ºÆ®ÀÇ »è°¨
±×¸² 8. ÀÇ ÆÄÆ® A ´Â
__declspec(dllexport)
À» »ç¿ëÇØ ¸Å´ÏÁö ÇÔ¼ö¸¦ ¸Å´ÏÁö Äڵ忡
°ø°³ÇÏ´Â °æ¿ìÀÇ ÃµÀÌ ÆÐ½º¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ÆÄÆ® B ´Â
ÇÔ¼ö¿¡ÀÇ ¾×¼¼½º¸¦ ³ªÅ¸³»°í ÀÖ¾î ±×°÷¿¡¼´Â ¸Å´ÏÁöÇü¿¡ ÀÇÇÑ ÇÔ¼öÀÇ ·¦°ú #using ÀÌ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù. ±× °á°ú ÆÄÆ® A ÀÇ ÇÁ·Î¼¼½º¿Í´Â ´Þ¶ó ÄÚ½ºÆ®ÀÇ
ºñ½Ñ »êÅ©°¡ Á¦°ÅµÇ°í ÀÖ½À´Ï´Ù.
Åë°è
Visual Studio .NET 2002 C++ ¿¡ µµÀÔµÈ
ÀÌ·¡ Visual C++ ¿¡ ÀÇÇÑ .NET Framework Àº
Å©°Ô ÁøÈÇØ ¿Ô½À´Ï´Ù. C++
ÀÌ Á¦°øÇÏ´Â Áö±Ý±îÁö ¾øÀ» ¸¸ÅÀÇ À¯¿¬¼º¿¡ ÀÇÇØ C++ ÇÁ·Î±×·¡¸Ó´Â ÆÛÆ÷¸Õ½ºÀÇ ³ôÀº ¸Å´ÏÁö Äڵ带 Àͼ÷ÇØÁø ¹æ¹ýÀ¸·Î ±â¼úÇÒ ¼ö°¡
ÀÖ½À´Ï´Ù. .NET ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÑ ¾ð¾î´Â ¸¹ÀÌ
ÀÖ½À´Ï´Ù¸¸ ÆÛÆ÷¸Õ½ºÀÇ
ÃÖ´ëÈ¿¡ °ü½ÉÀÌ ÀÖ´Ù¸é Visual C++ À» ¼±ÅÃÇØ¾ß ÇÕ´Ï´Ù.
|