ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 GCC ¿¡ ´ëÇØ¼
GNU C compiler´Â GNU systemÀ» ÀÌ·ç°í ÀÖ´Â Áß¿äÇÑ ºÎºÐÁß ÇϳªÀ̸ç Richard Stallman¿¡ ÀÇÇØ¼ ¸¸µé¾îÁ³´Ù. ÃÖÃÊ¿¡´Â ´ÜÁö CÄڵ常À» ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ¾ú±â ¶§¹®¿¡ GNU C Compiler·Î ºÒ¸®¿ü¾ú´Ù. ±×·¯´ø °ÍÀÌ ´Ù¸¥ ¸¹Àº Áö¿øÀڵ鿡 ÀÇÇØ¼ C++, Fortran, Ada, Java µîÀÇ ÄÄÆÄÀϵµ Áö¿øÇÒ ¼ö ÀÖ°Ô µÇ¸é¼ GNU Compiler CollectionÀ¸·Î À̸§À» º¯°æÇÏ°Ô µÈ´Ù. ÀÌ ¹®¼´Â ´ÜÁö C¾ð¾îÄڵ忡 ´ëÇÑ ÄÄÆÄÀÌ·¯·Î½áÀÇ GCCÀÇ »ç¿ë¹ý¿¡ ´ëÇØ¼ ´Ù·é´Ù.
GCC´Â Linux»Ó¸¸ ¾Æ´Ï¶ó FreeBSD, NetBSD, OpenBSD, SunOS, HP-UX, AIXµîÀÇ *Nix¿î¿µÃ¼Á¦ ±×¸®°í Cygwin, MingW32ÀÇ À©µµ¿ìȯ°æ¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ç÷¿Æû ¿ª½Ã Intel x86, AMD x86-64, Alpha, SPARC µî¿¡¼ »ç¿ë°¡´É ÇÏ´Ù. ÀÌ·¯ÇÑ ´Ù¾çÇÑ È¯°æ¿¡¼ÀÇ ¿î¿ë°¡´É¼º ¶§¹®¿¡ ´Ù¾çÇÑ Ç÷¿Æû¿¡¼ ÀÛµ¿À» ÇØ¾ß ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇÑ ¸ñÀûÀ¸·Î À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. 2 GCCÀÇ ±âº» ¿É¼Çµé
GCC°¡ ¿©·¯ºÐÀÇ ½Ã½ºÅÛ¿¡ ¼³Ä¡µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÏ°í ±ÛÀ» ¾²µµ·Ï ÇϰڴÙ. 2.1 GCC Ư¡°ú Áö¿ø ȯ°æ È®ÀÎ[root@localhost include]# gcc -v Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.4/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux Thread model: posix gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)-v¿É¼ÇÀ» ÀÌ¿ëÇϸé GCC¿Í °ü·ÃµÈ ´Ù¾çÇÑ Á¤º¸µéÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. À§ÀÇ Á¤º¸¿¡¼ ÇöÀç ¼³Ä¡µÈ gcc´Â POSIX(12) ¾²·¹µå ¸ðµ¨À» Áö¿øÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÌ´Â ´ÙÁß¾²·¹µå¸¦ Áö¿øÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÛ¼ºÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
ÀÌÁ¦ ÇϳªÀÇ Çì´õÆÄÀϰú ÇϳªÀÇ ¼Ò½ºÄÚµåÆÄÀÏ·Î ÀÌ·ç¾îÁø °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé°í ÄÄÆÄÀÏÀ» ÇØº¸¸é¼ GCC¿¡¼ Áö¿øÇÏ´Â ´Ù¾çÇÑ ÄÄÆÄÀÏ ¿É¼Çµé¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. // helloworld.h #define COUNT 2 static char hello[] = "hello world"; // helloworld.c #include <stdio.h> #include "helloworld.h" int main() { int i; for (i =0; i <= COUNT; i++) { printf("%s - %d\n", hello, i); } return 0; } 2.2 Object ÆÄÀÏÀÇ »ý¼º[root@localhost ~]# gcc -v -c helloworld.c
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.4/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/u
sr/share/info --enable-shared --enable-threads=posix --disable-checking --with-s
ystem-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-aw
t=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)
/usr/libexec/gcc/i386-redhat-linux/3.4.4/cc1 -quiet -v helloworld.c -quiet -dum
pbase helloworld.c -auxbase helloworld -version -o /tmp/ccs8066J.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/3.4.4/../../../..
/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i386-redhat-linux/3.4.4/include
/usr/include
End of search list.
GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2) (i386-redhat-linux)
compiled by GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64407
as -V -Qy -o helloworld.o /tmp/ccs8066J.s
GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version 2.15.92.
0.2 20040927
À§ °á°ú¿¡¼ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé±â À§Çؼ include °æ·Î¸¦ ã´Â °úÁ¤°ú GNU assembler¸¦ ÀÌ¿ëÇØ¼ ÄÄÆÄÀÏÀ» Çϰí ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÄÄÆÄÀÏ·¯´Â ¿øº»ÆÄÀÏ·Î ºÎÅÍ /tmp/ccs8066J.s ¶ó´Â ¾î¼Àºí¸®Äڵ带 ¸¸µé°í, À̰ÍÀ» as¸¦ ÀÌ¿ëÇØ¼ helloworld.o¶ó´Â À̸§ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé¾ú´Ù.2.3 ½ÇÇàÆÄÀÏ »ý¼º[root@localhost ~]# gcc -v -o helloworld helloworld.c
...[»ý·«]...
GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2) (i386-redhat-linux)
compiled by GNU C version 3.4.4 20050721 (Red Hat 3.4.4-2).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64407
as -V -Qy -o /tmp/ccj9GxKi.o /tmp/ccGzRoCh.s
GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version 2.15.92.0.2 20040927
/usr/libexec/gcc/i386-redhat-linux/3.4.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker
/lib/ld-linux.so.2 -o helloworld /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crti.o
/usr/lib/gcc/i386-redhat-linux/3.4.4/crtbegin.o -L/usr/lib/gcc/i386-redhat-linux/3.4.4 -L/usr/lib/gcc/i386-redhat-linux/3.4.4
-L/usr/lib/gcc/i386-redhat-linux/3.4.4/../../.. /tmp/ccj9GxKi.o -lgcc
--as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s
--no-as-needed /usr/lib/gcc/i386-redhat-linux/3.4.4/crtend.o /usr/lib/gcc/i386-redhat-linux/3.4.4/../../../crtn.o
-L ¿É¼ÇÀ» ÀÌ¿ëÇØ¼ ¸µÅ©ÇÒ ¶óÀ̺귯¸®ÀÇ °æ·Î¸¦ ã°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ¿©±â¿¡¼´Â ±âº»ÀûÀ¸·Î ÁöÁ¤µÈ °æ·Î¿¡¼¸¸ ¶óÀ̺귯¸®¸¦ ã°í Àִµ¥, º°µµ·Î -L ¿É¼ÇÀ» Á༠´Ù¸¥ °æ·Î¿¡¼ ¶óÀ̺귯¸®¸¦ ãµµ·Ï ÇÒ ¼öµµ ÀÖ´Ù. ±×¸®°í -l¿É¼ÇÀ» ÀÌ¿ëÇØ¼ ¸µÅ©ÇÒ ¶óÀ̺귯¸®¸¦ ÁöÁ¤Çϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. -l·Î ÁöÁ¤µÈ ¶óÀ̺귯¸®´Â -L¿¡ ÀÇÇØ ÁöÁ¤µÈ °æ·Î¿¡¼ µ¿ÀÏÇÑ À̸§ÀÇ ¶óÀ̺귯¸®°¡ ÀÖ´ÂÁö¸¦ ã¾Æ¼ ¸µÅ©ÇÏ°Ô µÈ´Ù.
ÇÊ¿äÇÑ ¶óÀ̺귯¸®µéÀ» ¸µÅ© ½ÃŰ°í ³ª¸é, ¿ÏÀüÇÑ ½ÇÇàÆÄÀÏÀÌ ¸¸µé¾îÁø´Ù. 3 PreProcess ¿¡ ´ëÇØ¼
Àü󸮱â·Î ºÒ¸®¿ì±âµµ ÇÏ´Â preprocessor´Â CÄÄÆÄÀÏ·¯¿¡¼ ¸Å¿ì Áß¿äÇÑ ¿ªÇÒÀ» ´ã´çÇÑ´Ù. preprocessorÀº #include, #ifdef, #pragmaµî '#'À¸·Î ½ÃÀ۵Ǵ Äڵ带 ºÐ¸®ÇØ ³½´Ù. À̵é ÄÚµå´Â ÄÄÆÄÀÏÀÌ ÀÌ·ç¾îÁö±â Àü¿¡, ¸ÅÅ©·Î ġȯ, Á¶°ÇºÎ ÄÄÆÄÀÏ È®ÀÎ, ÆÄÀÏ Ã·°¡(include)µîÀÇ ¾÷¹«¸¦ ó¸®ÇÑ´Ù. ¿¹¸¦ µé¾î #define COUNT 2 ¶ó´Â ÄÚµå¶óÀÎÀÌ ÀÖ´Ù¸é, À̺κÐÀ» ÇØ¼®Çؼ ¼Ò½ºÄڵ忡 ÀÖ´Â ¸ðµç COUNT¸¦ 2·Î ġȯÇÏ´Â ÀÏÀ» ÇÑ´Ù. preprocessorÀº ÁÙ´ÜÀ§·Î ó¸®ÇÑ´Ù. 3.1 proprocessed Ãâ·Â# gcc -E helloworld.c > helloworld.preprocessÆÄÀÏ÷°¡, ¸ÅÅ©·ÎġȯµîÀ» Æ÷ÇÔÇÑ ¸ðµç preprocess °úÁ¤À» ÆÄÀÏ·Î ÀúÀåÇϰí ÀÖ´Ù. ÆíÁý±â¸¦ ÀÌ¿ëÇØ¼ ÆÄÀÏÀ» ¿¾îº¸¸é preprocess°¡ ´ã´çÇÏ´Â ÀÏÀÌ ¾î¶²°ÇÁö¸¦ ´ë·«ÀûÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ½ÇÁúÀûÀ¸·Î CÄÄÆÄÀÏ·¯´Â preprocess°¡ ¿ÏÀüÈ÷ ³¡³ »óÅÂÀÎ helloworld.preprocess¸¦ ¼Ò½ºÄÚµå·Î ÇØ¼ ÄÄÆÄÀÏÀ» ¼öÇàÇÑ´Ù. 3.2 ¸ÅÅ©·Î ġȯ (#define)# gcc -E helloworld.c -dM | sort | less¸ðµç define ¹®À» ó¸®Çϰí À̸¦ sort ÇØ¼ º¸¿©ÁÖ°í ÀÖ´Ù. ¿©±â¿¡¼ GNUC, GNUC_MINOR, GNUC_PATCHLEVEL µîµî GCC¹öÀü°ú °ü·ÃµÈ Á¤º¸µéµµ È®ÀÎÇÒ ¼ö ÀÖ´Ù. 4 Assembly ÄÚµå »ý¼º
GCC´Â ÀÌÁøÄڵ带 ¸¸µé±âÀü¿¡ CÄڵ带 assembly ÄÚµå·Î º¯È¯µÇ°í, º¯È¯µÈ assembly°¡ ÇØ¼®µÇ¾î¼ ÀÌÁøÄڵ尡 ¸¸µé¾îÁø´Ù. -S ¿É¼ÇÀ» ÀÌ¿ëÇϸé, CÄڵ尡 ¾î¶² assemblyÄÚµå·Î º¯È¯µÇ´ÂÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. # gcc -S helloworld.c´ÙÀ½Àº ¸¸µé¾îÁø assembly ÄÚµå´Ù. .file "helloworld.c" .data .type hello, @object .size hello, 12 hello: .string "hello world" .section .rodata .LC0: .string "%s - %d\n" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp movl $0, -4(%ebp) .L2: cmpl $2, -4(%ebp) jg .L3 subl $4, %esp pushl -4(%ebp) pushl $hello pushl $.LC0 call printf addl $16, %esp leal -4(%ebp), %eax incl (%eax) jmp .L2 .L3: movl $0, %eax leave ret .size main, .-main .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.4.4 20050721 (Red Hat 3.4.4-2)"À§ÀÇ ¾î¼Àºí¸® Äڵ忡¼ ¿ì¸®´Â "hello world" ¹®ÀÚ¿ÀÌ ÀбâÀü¿ë µ¥ÀÌÅÍ·Î staticÇÏ°Ô Á¤ÀǵǾî ÀÖ´Â°É È®ÀÎÇÒ ¼ö ÀÖ´Ù. .LC0 ¼½¼ÇÀº printfÀÇ ÀÎÀÚ¸¦ º¸¿©ÁÖ°í ÀÖ´Ù. ÀÌ °ªµéÀº ½ºÅÿ¡ ³Ö¾îÁö¸ç printf()°¡ È£ÃâµÉ ¶§ Àоî¿Â´Ù. .L2 ¼½¼Ç¿¡ loop¸¦ À§ÇÑ »óŰ˻ç Äڵ尡 µé¾î°¬´Ù. .L3 ¼½¼ÇÀº ÇÔ¼ö°¡ ³¡³ÈÄ ÇÊ¿äÇÑ °ªÀ» ¸®ÅÏÇϰí Á¾·áÇϱâ À§ÇÑ Äڵ尡 µé¾î°¬´Ù. ÀÌ ¾î¼Àºí¸®ÄÚµå´Â ÄÄÆÄÀÏµÇ¾î¼ ±â°è°¡ ÇØ¼®ÇÒ ¼ö ÀÖ´Â ÀÌÁøÄÚµå·Î º¯°æµÇ¸ç, ÀÌ·¯ÇÑ ÄÄÆÄÀÏ ÀÛ¾÷Àº as°¡ ´ã´çÇÑ´Ù. 5 ¶óÀ̺귯¸® »ç¿ëÇϱâ
¸¸µç Äڵ带 ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¶óÀ̺귯¸® ÇüÅ·Π¸¸µé±â¸¦ ¿øÇÑ´Ù¸é -fpic ¿É¼ÇÀ» ÁÖ¸éµÈ´Ù. fpic ¿É¼ÇÀº Äڵ带 Position Independent Code (PIC) ·Î ¸¸µé¾î ÁØ´Ù. ¶óÀ̺귯¸®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº library ¸¸µé±â¸¦ Âü°íÇϱ⠹ٶõ´Ù. 6 profiling ¹× µð¹ö±ë
profiling ´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇà½Ã°£½Ã ÄÚµåÀÇ ¾î¶² ºÎºÐÀÌ °¡Àå ¸¹Àº ÀÚ¿øÀ» Â÷ÁöÇϰí ÀÖ´ÂÁö ¾Ë¾Æ³»±â À§Çؼ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. profilingÀº ±âº»ÀûÀ¸·Î ÇÁ·Î±×·¥ÀÇ Æ¯Á¤ÇÑ ÁöÁ¡¿¡ ¸ð´ÏÅ͸µ Äڵ带 ÀÔ·ÂÇÏ´Â ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁö¸ç GCCÀÇ -pg¿É¼ÇÀ» ÀÌ¿ëÇØ¼ ¸ð´ÏÅ͸µ Äڵ带 ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù. profiling¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Gprof¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥ ÃÖÀûȸ¦ Âü°íÇϱ⠹ٶõ´Ù.
ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥À» µð¹ö±ë Çϱâ À§Çؼ´Â ´ç¿¬È÷ ÇÁ·Î±×·¥ ½ÇÇà ÄÚµå ¿ÜÀÇ ´Ù¸¥ Äڵ尡 »ðÀÔµÅ¾ß ÇÑ´Ù. -g ¿É¼ÇÀ» ÀÌ¿ëÇϸé, gdb¸¦ ÅëÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿©ºÐÀÇ µð¹ö±ë Á¤º¸°¡ Äڵ忡 »ðÀԵȴÙ. ¿©ºÐÀÇ Äڵ尡 »ðÀԵDZ⠶§¹®¿¡ ½ÇÇàÆÄÀÏÀÇ Å©±â°¡ Ä¿Áø´Ù´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸, ¾îÂ÷ÇÇ µð¹ö±ëÀÌ ³¡³´ÙÀ½¿¡´Â µð¹ö±ëÄڵ带 Á¦°ÅÇÏ°í ´Ù½Ã ÄÄÆÄÀÏÇÏ¸é µÇ¹Ç·Î Å©°Ô ¹®Á¦µÉ°Ç ¾ø´Ù. ÀÏ´Ü µð¹ö±ë ¸ðµå·Î ÄÄÆÄÀÏÀÌ µÇ¸é ¸ðµç ÃÖÀûÈ(optimization) Ç÷¡±×°¡ ¹«È¿È µÈ´Ù. $ gcc -g -o helloworld helloworld.c #for adding debugging information $ gcc -pg -o helloworld helloworld.c #for profiling 7 ÄÄÆÄÀÏ ½Ã°£ ¸ð´ÏÅ͸µ
¿ÏÀüÇÑ ÇϳªÀÇ ½ÇÇàÆÄÀÏÀ» ¸¸µé±â À§Çؼ´Â ¸î°³ÀÇ ´Ü°è¸¦ °ÅÃÄÇÑ´Ù. ±×·¸´Ù¸é °¢°¢ÀÇ ´Ü°è¿¡ ¾î´ÀÁ¤µµÀÇ ½Ã°£ÀÌ ¼Ò¸ðµÇ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë°í ½ÍÀ» ¶§°¡ ÀÖÀ» °ÍÀÌ´Ù. -time ¿É¼ÇÀ» »ç¿ëÇÏ¸é °¢ ´Ü°èº° ¼Ò¸ð½Ã°£À» ¾Ë ¼ö ÀÖ´Ù. [root@localhost ~]# gcc -time helloworld.c # cc1 0.07 0.01 # as 0.00 0.00 # collect2 0.06 0.01-Q ¿É¼ÇÀ» ÀÌ¿ëÇϸé Á»´õ ÀÚ¼¼ÇÑ ¼Ò¸ð½Ã°£À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ´õºÒ¾î ÄÄÆÄÀÏÀÌ ¾î¶°ÇÑ °úÁ¤À¸·Î ÀÌ·ç¾îÁö´ÂÁöµµ È®ÀÎ °¡´ÉÇÏ´Ù. [root@localhost ~]# gcc -Q helloworld.c main Execution times (seconds) preprocessing : 0.02 (25%) usr 0.00 ( 0%) sys 0.05 (26%) wall lexical analysis : 0.01 (12%) usr 0.01 (50%) sys 0.01 ( 5%) wall parser : 0.01 (13%) usr 0.00 ( 0%) sys 0.04 (21%) wall global alloc : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 5%) wall TOTAL : 0.08 0.02 0.19 8 GCC ÃÖÀûÈ
ÃÖÀûÈ¿¡ ´ëÇØ¼ ¼³¸íÇϱâ Àü¿¡, ¾î¶»°Ô ÄÄÆÄÀÏ·¯°¡ ¼·Î´Ù¸¥ Ç÷¿Æû°ú ´Ù¸¥ ¾ð¾î¿¡¼ »ç¿ë°¡´ÉÇÑ Äڵ带 »ý¼ºÇس»´ÂÁö¿¡ ´ëÇØ¼ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ÄÄÆÄÀÏ ÇÁ·Î¼¼½º´Â ´ÙÀ½ÀÇ 3°¡Áö ÄÄÆ÷³ÍÆ®µé·Î ÀÌ·ç¾îÁø´Ù.
GCC´Â 4´Ü°èÀÇ ÃÖÀûÈ Á¤µµ¸¦ Á¦°øÇÑ´Ù. ´Ü°è´Â -O ¿É¼ÇµÚ¿¡ ´Ü°è¸¦ ³ªÅ¸³»´Â ¼ýÀÚ¸¦ ¸í½ÃÇÏ´Â ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù. ±âº»ÀûÀ¸·Î´Â "ÃÖÀûȸ¦ ¾ÈÇÔ"Àε¥ -O0¿Í µ¿ÀÏÇÏ´Ù. -O1, -O2, -O3Àº ¾Æ·¡¿Í °°Àº ÃÖÀûÈ ¼öÁØÀ» °¡Áø´Ù.
[root@localhost ~]# gcc -O3 -o hello3 helloworld.c [root@localhost ~]# gcc -O0 -o hello0 helloworld.c [root@localhost ~]# ls -al hello* -rwxr-xr-x 1 root root 4754 1¿ù 3 19:12 hello3 -rwxr-xr-x 1 root root 4782 1¿ù 3 19:12 hello0 [root@localhost ~]# time ./hello3 > /dev/null real 0m0.003s user 0m0.001s sys 0m0.001s [root@localhost ~]# time ./hello0 > /dev/null real 0m0.002s user 0m0.000s sys 0m0.002sÀ§ÀÇ °á°ú¸¦ º¸¸é -O3 ÃÖÀûȸ¦ ÇßÀ» °æ¿ì ½ÇÇàÆÄÀÏÀÇ Å©±â°¡ ´õ ÀÛ¾ÆÁ³À½À» ¾Ë ¼ö ÀÖ´Ù.
-O ÃÖÀûÈ ¿É¼ÇÀº gccÀÇ ´Ù¾çÇÑ ÄÄÆÄÀÏ ¿É¼ÇÀ» ´Ü°èº°·Î Á¶ÇÕÇÑ °ÍÀ¸·Î ·¹º§º°·Î ´ÙÀ½ÀÇ ¿É¼ÇÀ» °¡Áø´Ù.
¶ÇÇÑ CPU¿Í architecture¿¡ µû¸¥ ÃÖÀûȵµ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î architecture¿¡ µû¶ó¼ °¡Áú ¼ö ÀÖ´Â ·¹Áö½ºÅÍÀÇ ¼ö°¡ ´Þ¶óÁú ¼ö Àִµ¥, À̸¦ Àß ÀÌ¿ëÇϸé Á»´õ ÃÖÀûÈµÈ ½ÇÇàÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù.
CPUÀÇ Á¾·ù´Â -mcpu=<CPU name>, architecture´Â -march=<architecture ŸÀÔ> À¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. architecture¿¡´Â ix86(i386, i486, i586), Pentiumx(pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4), athlon(athlon, athlon-tbird, athlon-xp, opteron)µîÀÌ ¿Ã ¼ö ÀÖ´Ù. architecture¸¦ ÁöÁ¤ÇØ ÁÙ°æ¿ì Á»´õ ¼¼¹ÐÇÑ ÃÖÀûȰ¡ °¡´ÉÇϰÚÁö¸¸, ºñ±³Àû ÃÖ½ÅÀÇ ¾ÆÅ°ÅØÃ³ ŸÀÔÀÔÀ» ÁöÁ¤ÇÒ °æ¿ì ÁÖÀÇ ÇØ¾ß ÇÑ´Ù. -march=i386 À¸·Î ÃÖÀûÈÇÑ ÄÚµåÀÇ °æ¿ì i686 ¿¡¼µµ ¹®Á¦¾øÀÌ µ¹¾Æ°¡°ÚÁö¸¸, -march=i686À¸·Î ÃÖÀûÈȯ ÄÚµå´Â ¿À·¡µÈ CPU¿¡¼ ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.
8.1 °ü·Ã¹®¼ |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|