전역변수, static변수를 0으로 초기화 하면 왜 bss영역에 들어가죠?
글쓴이: dbsthqkf / 작성시간: 일, 2014/01/05 - 12:27오후
memory영역중 data영역이 초기화 됬느냐 안됬느냐에 따라서
bss영역, data영역으로 나뉘는데요..
제생각으로는 전역변수나 static변수를 0으로 초기화 한것도 어쨌든 초기화 해준건데 왜
초기화 되지 않은 영역인 bss영역에 들어가는거죠?
보니까 전역변수나 static변수가 초기화 하지 않으면 0이 된다고 하던데 이것과 관련된 이유가 있나요…
추가질문!
지역변수를 초기화 하지 않고 출력해보면 쓰레기 값이 나올것이라고 생각했는데
쓰레기 값이라고 하면 341234 이렇게 생긴 값이라고 생각했는데
생각보다 0이 자주 출력되는데 0도 쓰레기 값이 될수 있나요?
ex.
int a;
int b;
int c;
int d;
int e;
printf(" a : %d", a);
printf(" b : %d", b);
printf(" c : %d", c);
printf(" d : %d", d);
printf(" e : %d", e);
결과 값 :
a : 84372
b : 0
c : 0
d : 33452
e : 23456
Forums:
영역 확인
영역 확인은
objdump -t a | grep bss_test
objdump -d -j .data a(실행파일)
objdump -d -j .bss a(실행파일)
를 사용하였습니다.
참조.
비슷한 질문이 Stackoverflow 있어요. 참조하세요.
http://stackoverflow.com/questions/16557677/difference-between-data-section-and-the-bss-section-in-c
감사합니당^^
감사합니당^^
댓글 달기