✅ 목표 (Goal)

✅ 목차 (Index)

✅ life-time life-cyle and scope

void func() {
    int i= 1; //(2)
	{
		int i= 2; //(1)
		// static int i= 2; // .DATA 초기화 안하면 .BSS
		printf("%d", i); // 1? 2? 2가 나오죠.
		// i를 어떻게 찾나? 이를 linkage라고 한대요. 컴파일러의 linker가 아니라네?
	}
	printf("%d", i);
}

linkage 규칙

자기가 속한 블럭에서 먼저 찾고

없으면 범위를 늘린다.

(1)을 주석처리하면 2가 출력

(2)를 주석처리하면 1이 출력되는게 아니라 에러, 왜냐면 {}사이에서 사라짐

(1)을 정적 변수로 만들면, 얘기가 달라짐, 그래도 에러, 왜요? scope에 접근이 안되기 때문

C:\\workspace\\work>size a.exe // 오호 이런 명령어가 있었어
   text    data     bss     dec     hex filename
 581520   91620    5888  679028   a5c74 a.exe

c:>objdump -h a.exe
Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         000709b8  0000000000401000  0000000000401000  00000600  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
  1 .data         000150f0  0000000000472000  0000000000472000  00071000  2**6
                  CONTENTS, ALLOC, LOAD, DATA
  2 .rdata        0000c200  0000000000488000  0000000000488000  00086200  2**6
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .pdata        0000744c  0000000000495000  0000000000495000  00092400  2**2