 |
 |
ÇöÀç Á¢¼ÓÁßÀÎ µî·Ï »ç¿ëÀÚ´Â 0¸í, ÀÍ¸í »ç¿ëÀÚ´Â 2¸í ÀÔ´Ï´Ù. Àüü µî·Ï »ç¿ëÀÚ: 751¸í
|
|
 |
 |
 |
 |
  |
Data, Bss Segment »çÀÌÁî º¯È |
|
 |
 |
±Û¾´ÀÌ: EzDoum ±Û¾´³¯: 2002³â 08¿ù 24ÀÏ ¿ÀÈÄ 02:14 |
|
 |
 |
 |
kldp¿¡ ¿Ã¶ó¿Â Áú¹®Àε¥.. Èï¹Ì·Î¿î°Ô ÀÖ¾î¼ Á¦°¡
¸î°¡Áö ½ÇÇèÈÄ¿¡ ´ä±ÛÀ» ´Þ¾Ò½À´Ï´Ù.
#include <stdio.h>
int arr_data[1000] = { 0, };
int arr_bss[1000];
int main()
{
int arr_local1[1000];
int arr_local2[1000] = { 0, };
printf("Hello World!\n");
return 0;
}
À§ÀÇ ¼Ò½ºÀÇ º¯¼öµéÀ» °¢°¢ Ãß°¡ÇÏ¸é¼ size·Î ½ÇÇàÆÄÀÏÀÇ °¢ segmentÀÇ
Å©±â¸¦ È®ÀÎÇØº¸¾Ò´õ´Ï,
data segmentÀÇ Å©±â´Â 4*1000 + 16¸¸Å ´Ã¾î³ª±¸¿ä.
bss segmentÀÇ Å©±â´Â 4*1000 + 8¸¸Å ´Ã¾î³ª±¸¿ä.
text segmentÀÇ Å©±â´Â ÃʱâȾÈÇÑ °æ¿ì¿¡´Â º¯È°¡ ¾ø°í,
º¯¼ö¸¦ ÃʱâÈÇÏ¸é¼ ¼±¾ðÇϸé, 8¸¸Å ´Ã¾î³³´Ï´Ù.
¿©±â¼, º¯¼öÅ©±â¿Ü¿¡ ´Ã¾î³ Å©±â(16, 8, 8)´Â
¾î¶² Á¤º¸°¡ Ãß°¡µÇ±â ¶§¹®¿¡ »ý±â´Â °Ç°¡¿ä??
-----------------------------------------------------------------
µð¾î¼Àºí ÇÏ´Â °ÍÀº gdb¸¦ »ç¿ëÇØµµ µÇ°í
objdump¶õ À¯Æ¿À» »ç¿ëÇØµµ µË´Ï´Ù.
±×·³ Àϵý °¢°¢ÀÇ »óŸ¦ Á¤¸®¸¦ ÇØº¸Áö¿ä..
gcc elf.c -s ÇÏ¸é ¾î¼Àºí¸® ÄÚµå·Î »ý¼º ÇØÁÖ±â´Â Çϴµ¥
½ÇÁ¦ÀûÀ¸·Î ¾î¼Àºí·¯°¡ ¹ÙÀ̳ʸ® Á¤·Ä°°Àº °ÍÀ» Çϴϱî..
±×³É ¹ÙÀ̳ʸ® »óŸ¦ ´ýÇÁÇØº¸´Â°Ô Á¤È®ÇÕ´Ï´Ù.
-----------------------------------------------------------------
//#include <stdio.h>
int arr_data[1000] ;
int arr_bss[1000];
int main()
{
int arr_local1[1000];
int arr_local2[1000] ;
// printf("Hello World!\n");
return 0;
}
gcc elf.c -o elf
objdump -h elf
Sections: elf init ¾øÀ½
Idx Name Size VMA LMA File off Algn
11 .text 000000fc 080482f0 080482f0 000002f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .data 0000000c 08049410 08049410 00000410 2**2
CONTENTS, ALLOC, LOAD, DATA
20 .bss 00001f60 08049500 08049500 00000500 2**5
ALLOC
-----------------------------------------------------------------
//#include <stdio.h>
int arr_data[1000] = {0,};
int arr_bss[1000];
int main()
{
int arr_local1[1000];
int arr_local2[1000] ={0,} ;
// printf("Hello World!\n");
return 0;
}
gcc elf2.c -o elf2
objdump -h elf2
Sections: elf2 init ÀÖÀ½
Idx Name Size VMA LMA File off Algn
11 .text 0000010c 080482f0 080482f0 000002f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .data 00000fc0 08049420 08049420 00000420 2**5
CONTENTS, ALLOC, LOAD, DATA
20 .bss 00000fc0 0804a4c0 0804a4c0 000014c0 2**5
ALLOC
-----------------------------------------------------------------
elf, elf2ÀÇ »çÀÌÁî ºñ±³
elf elf2
Idx Name Size Algn Size Algn
11 .text 000000fc(252) 2**4 0000010c(268) 2**4
14 .data 0000000c(12) 2**2 00000fc0(4032) 2**5
20 .bss 00001f60(8032) 2**5 00000fc0(4032) 2**5
Àϵý main¿¡¼ ¾à°£ÀÇ ÄÚµå Â÷À̰¡ ³ª´Âµ¥
¹ÙÀ̳ʸ®¸¦ ´ýÇÁÇØºÃ½À´Ï´Ù. objdump -s elf
ÀÌ·±½ÄÀ¸·Î ÇϸéµÇ´Âµ¥...
¾Æ·¡¸¦ º¸½Ã¸é ¾Ë°ÚÁö¸¸,
ÃʱâÈ ·çƾ ¶§¹®¿¡ Á¶±Ý Â÷À̰¡ ÀÖ½À´Ï´Ù.
Áï elf.c°°Àº °æ¿ì¿£ ½ºÅÿ¡ °ø°£À» Àâ¾ÆµÎ°í
(80483a3: 81 ec 40 1f 00 00 sub $0x1f40,%esp)
¹Ù·Î »ç¿ëÀ» ÇÏÁö¸¸
elf2.cÀÇ °æ¿ì¿£ elf.c¿Í °°ÀÌ ½ºÅÿ¡ ÀÚ¸®¸¦ Àâ¾ÆÁÖ°í
¾Æ·¡¿Í °°ÀÌ Å¬¸®¾îÇØÁÖ´Â ÀÛ¾÷À» ÇÕ´Ï´Ù.
80483b0: 31 c0 xor %eax,%eax
80483b2: fc cld
80483b3: b9 e8 03 00 00 mov $0x3e8,%ecx
80483b8: f3 ab repz stos %eax,%es:(%edi)
·¹Áö½ºÅÍ eax¸¦ 0À¸·Î ¸¸µç´ÙÀ½
Ç÷¡±×¸¦ ¸®¼ÂÇϰí
ecx¿¡ ¹Ýº¹ÇÒ È½¼ö (4000)¸¦ ÁöÁ¤Çϰí
eaxÀÇ °ªÀ» %es:(%edi)¿¡ Àü¼ÛÇÏ´Â °ÅÁÒ..
repz¸í·É¾î¿¡ ÀÇÇØ¼ ecx´Â Çϳª¾¿ ÁÙ°í,, edi´Â Çϳª¾¿ Áõ°¡Çϴϱî
°á°úÀûÀ¸·Î´Â ½ºÅÿ¡ ÀÚ¸®ÀâÀº arr_local2°¡ 0À¸·Î Ŭ¸®¾î µÇ°ÚÁö¿ä..
¿©±â¼ ÇѰ¡Áö Áý°í ³Ñ¾î°¥ »çÇ×ÀÌ Àִµ¥,
¸¸¾à¿¡ arr_data¸¦ 0ÀÌ ¾Æ´Ñ ƯÁ¤ ´Ù¸¥ µ¥ÀÌÅÍ·Î ÃʱâÈ ÇÑ´Ù¸é
arr_local2[1024] = {1,2,3,4,5,6};
ÀÌ ³»¿ëÀ¸ rdata ¼¼±×¸ÕÆ®¿¡ ÀúÀåÀÌ µÇ°í
Áö±Ýó·³ ½ºÆ®¸µÀÏ 0 ¹Ð¾î¹ö¸®´Â°Ô ¾Æ´Ï¶ó...
¸Þ¸ð¸® Ä«ÇÇÇÏ´Â ¾î¼Àºí¸®°¡ Ãß°¡µË´Ï´Ù.
±×·³ ±Û·Î¹ú¿¡ ÀÖ´Â arr_data´Â ¾î¶³±î¿ä?
À̰͵µ ÃʱâÈ ÇÏ´Â ·çƾÀÌ ÀÖÀ»±î¿ä?
¿ä°ÍÀº Àß »ý°¢Çغ¸¸é ±×·²Çʿ䰡 ¾ø½À´Ï´Ù.
arr_data´Â ±Û·Î¹ú µ¥ÀÌÅÍ·Î., ÄÄÆÄÀÏ Å¸ÀÓ¶§ ¹Ì¸® ±× °ªÀÌ Á¤ÇØÁ®¼
¹ÙÀ̳ʸ®¿¡ ÀÖ´Â ³»¿ëÀÌ ±×´ë·Î ¸Þ¸ð¸®·Î ¿Ã¶ó°¡´Ï±î
ÃʱâÈ ·çƾÀÌ ÇÊ¿ä ¾ø´Â°ÍÀÌÁÒ..
±×·³ °á·ÐÀûÀ¸·Î »çÀÌÁî Â÷ÀÌ´Â ¿Ö »ý°åÀ»±î¿ä?
¹Ù·Î... ÀÌ ÃʱâÈ ÇÏ´Â ·çƾ¶§¹®¿¡ Äڵ尡 ´õ Ãß°¡ µÇ¾ú±â ¶§¹®ÀÌÁÒ..
±×·±µ¥ º¸±âÁÁ°Ô 16À̶õ °ªÀ¸·Î Â÷À̰¡ ³ª´Â°É±î¿ä?
±×°ÍÀº... ¼¼±×¸ÕÆ®°¡ È¿À²ÀûÀÎ Á¢±ÙÀ» À§Çؼ ƯÁ¤ ¹ÙÀÌÆ®·Î Á¤·ÄÀÌ
µÇ±â ¶§¹®ÀÔ´Ï´Ù.
Áï elf2´Â 000000fc ÄÚµå»çÀÌÁîÀÇ ÀӰ踦 ³Ñ¾î¹ö·Á¼
´ÙÀ½ ÀÓ°èÁ¡ÀÎ 0000010c±îÁö »çÀÌÁî°¡ Áõ°¡ÇØ ¹ö¸°°ÍÀÌÁö¿ä..
ÀÌÁ¦ ±×·³ ¾Æ·¡Ç¥¿¡¼ ¿Ö Algn°ªÀ» Âï¾ú´ÂÁö ¾Ë°ÚÁö¿ä?
Idx Name Size Algn Size Algn
11 .text 000000fc(252) 2**4 0000010c(268) 2**4
14 .data 0000000c(12) 2**2 00000fc0(4032) 2**5
20 .bss 00001f60(8032) 2**5 00000fc0(4032) 2**5
ÀÚ ¾Æ·¡´Â main functionÀÇ ¾î¼Àºí¸® ÀÚ·áÀÔ´Ï´Ù.
080483a0 <main>: elf
80483a0: 55 push %ebp
80483a1: 89 e5 mov %esp,%ebp
80483a3: 81 ec 40 1f 00 00 sub $0x1f40,%esp
80483a9: 31 c0 xor %eax,%eax
80483ab: eb 03 jmp 80483b0 <main+0x10>
80483ad: 8d 76 00 lea 0x0(%esi),%esi
80483b0: c9 leave
80483b1: c3 ret
80483b2: 90 nop
80483b3: 90 nop
80483b4: 90 nop
80483b5: 90 nop
80483b6: 90 nop
80483b7: 90 nop
80483b8: 90 nop
80483b9: 90 nop
80483ba: 90 nop
80483bb: 90 nop
80483bc: 90 nop
80483bd: 90 nop
80483be: 90 nop
80483bf: 90 nop
080483a0 <main>: elf2
80483a0: 55 push %ebp
80483a1: 89 e5 mov %esp,%ebp
80483a3: 81 ec 40 1f 00 00 sub $0x1f40,%esp
80483a9: 57 push %edi
80483aa: 8d bd c0 e0 ff ff lea 0xffffe0c0(%ebp),%edi
80483b0: 31 c0 xor %eax,%eax
80483b2: fc cld
80483b3: b9 e8 03 00 00 mov $0x3e8,%ecx
80483b8: f3 ab repz stos %eax,%es:(%edi)
80483ba: 31 c0 xor %eax,%eax
80483bc: eb 02 jmp 80483c0 <main+0x20>
80483be: 89 f6 mov %esi,%esi
80483c0: 8b bd bc e0 ff ff mov 0xffffe0bc(%ebp),%edi
80483c6: c9 leave
80483c7: c3 ret
80483c8: 90 nop
80483c9: 90 nop
80483ca: 90 nop
80483cb: 90 nop
80483cc: 90 nop
80483cd: 90 nop
80483ce: 90 nop
80483cf: 90 nop
ÀÚ ±×·³ data´Â 8ÀÌ Â÷À̰¡ ³´Ù°í Çߴµ¥
Á¦°¡ ½ÇÇèÀ» ÇØº¸´Ï±î. Àú´Â 20ÀÌ Â÷À̰¡ ³ª³×¿ä..
À½.. ÀÌ°Í ¿ª½Ã Á¤·Ä¶§¹®ÀÔ´Ï´Ù.
¾Æ·¡ÀÇ ´ýÇÁ³»¿ªÀ» º¸¸é, elf´Â ¾à°£ÀÇ µ¥ÀÌÅÍ ¿µ¿ªÀÌ
4¹ÙÀÌÆ® ´ÜÀ§·Î Á¤·ÄÀÌ µÇ¾î¼... 12¹ÙÀÌÆ®·Î Á¸À縦 ÇÕ´Ï´Ù.
ÇÏÁö¸¸,,
elf2ÀÇ °æ¿ì¿£ 12 + 4000 Àε¥. À̰ÍÀÌ 4000À» ³Ñ¾î¹ö·¯¼
´ÙÀ½ ÀÓ°èÁ¡Àº 4032±îÁö Ä¿Á®¹ö¸°°ÅÁÒ..(elf2ÀÇ µ¥ÀÌÅÍ Á¤·ÄÀº 2^5)
Contents of section .data: elf
8049410 00000000 2c940408 00000000 ....,.......
Contents of section .data: elf2
8049420 00000000 f0a30408 00000000 00000000 ................
8049430 00000000 00000000 00000000 00000000 ................
8049440 00000000 00000000 00000000 00000000 ................
8049450 00000000 00000000 00000000 00000000 ................
8049460 00000000 00000000 00000000 00000000 ................
8049470 00000000 00000000 00000000 00000000 ................
8049480 00000000 00000000 00000000 00000000 ................
8049490 00000000 00000000 00000000 00000000 ................
....
804a380 00000000 00000000 00000000 00000000 ................
804a390 00000000 00000000 00000000 00000000 ................
804a3a0 00000000 00000000 00000000 00000000 ................
804a3b0 00000000 00000000 00000000 00000000 ................
804a3c0 00000000 00000000 00000000 00000000 ................
804a3d0 00000000 00000000 00000000 00000000 ................
elf2¿¡¼ ÀÏÁ¾ÀÇ filler°¡ ¾îµð¿¡ µé¾î°¬À»±î¿ä?
±×°ÍÀ» ¾Ë¾Æº¸±â À§Çؼ main¿¡ Äڵ带 ¾à°£ Ãß°¡Çß½À´Ï´Ù,
´Ü ¿©±â¼ ÁÖÀÇÇÒ »çÇ×Àº Äڵ尡 Á¤·ÄÀ» À§Çؼ ³²°ÜµÐ
¿©ºÐº¸´Ù Ä¿Á®¹ö¸®¸é Àüü Äڵ尡 Áõ°¡ÇØ ¹ö¸®´Ï
Àý´ë°ª ºñ±³°¡ ¾ÈµË´Ï´Ù...
//#include <stdio.h>
int arr_data[1000] = {0,};
int arr_bss[1000];
int main()
{
int arr_local1[1000];
int arr_local2[1000] ={0,} ;
arr_data[0] = 1;
// printf("Hello World!\n");
return 0;
}
080483a0 <main>:
80483a0: 55 push %ebp
80483a1: 89 e5 mov %esp,%ebp
80483a3: 81 ec 40 1f 00 00 sub $0x1f40,%esp
80483a9: 57 push %edi
80483aa: 8d bd c0 e0 ff ff lea 0xffffe0c0(%ebp),%edi
80483b0: 31 c0 xor %eax,%eax
80483b2: fc cld
80483b3: b9 e8 03 00 00 mov $0x3e8,%ecx
80483b8: f3 ab repz stos %eax,%es:(%edi)
80483ba: c7 05 40 94 04 08 01 movl $0x1,0x8049440
80483c1: 00 00 00
80483c4: 31 c0 xor %eax,%eax
80483c6: eb 00 jmp 80483c8 <main+0x28>
80483c8: 8b bd bc e0 ff ff mov 0xffffe0bc(%ebp),%edi
80483ce: c9 leave
80483cf: c3 ret
ÀÚ.. ´äÀÌ ³ª¿Ô³×¿ä.
80483ba: c7 05 40 94 04 08 01 movl $0x1,0x8049440
º¸½Ã¸é ¾Ë°ÚÁö¸¸. elf¶§ ÀÖ´ø 12¹ÙÀÌÆ® µÚ¸¦ 20¹ÙÀÌÆ® 0À¸·Î ±ò°í
±×´ÙÀ½ ºÎÅÍ 0x8049440ÁÖ¿í ¿¬¼ÓµÈ °ø°£À» ÇÒ´çÇÏ°Ô µË´Ï´Ù.
Á¦ ½ÇÇè¿¡¼´Â bss´Â Á¦°¡ ¿øÇÏ´Â Å©±â ¸¸Å µ¿ÀÏÇÑ »çÀÌÁî·Î ÁÙ¾ú³×¿ä..
À½... º¸½Ã°í ´Ù½Ã Àß ÀÌÇØ°¡ ¾ÈµÇ¸é Áú¹®ÇØÁÖ¼¼¿ä..
´öºÐ¿¡... Àúµµ ¿¾³¯¿¡ ¹è¿î°Å º¹½Àµµ Çϰí Á¤¸®µµ Çϰí ÁÁ³×¿ä. ^^
ps.
¾Æ ÇѰ¡Áö Ãß°¡.. ÀÚ·á°¡ Ä¿Á³À»¶§ 32·Î Á¤·ÄÇϴ°ÍÀº ¹«¾ù ¶§¹®Àϱî¿ä?
¤»¤»
±×°Ç ¾Æ¸¶µµ ij½¬¶û ¿¬°üÀÌ Å¬²®´Ï´Ù.
Á¦°¡ gcc¼Ò½º¸¦ ºÐ¼®ÇØ º¸Áö´Â ¾Ê¾ÒÁö¸¸..
Á¦°¡ ÄÄÆÄÀÏÇÑ È¯°æÀÇ cpu´Â ´ÙÀ½°ú °°Àº ij½¬¶óÀÎÀ» °¡Áö°í Àְŵç¿ä
TLB and cache info:
01: Instruction TLB: 4KB pages, 4-way set assoc, 32 entries
02: Instruction TLB: 4MB pages, 4-way set assoc, 2 entries
03: Data TLB: 4KB pages, 4-way set assoc, 64 entries
43: 2nd-level cache: 512KB, 4-way set assoc, 32 byte line size
08: 1st-level instruction cache: 16KB, 4-way set assoc, 32 byte line size
04: Data TLB: 4MB pages, 4-way set assoc, 8 entries
0c: 1st-level data cache: 16KB, 4-way set assoc, 32 byte line size
±×·¡¼ ij½¬¶óÀο¡ °ÉÄ¡Áö ¸»¶ó°í Àú·¸°Ô ÇØÁִ°Š°°³×¿ä..
°ü·Ã ¸µÅ©
[ºÐ·ù: ¾î¼Àºí¸® ] |
|
 |
 |
< C++ Optimization Strategies and Techniques -Pete Isensee | delete date or delete [] data >
|
 |
 |