본문 바로가기
코드/C++

section .bss

by bongin 2022. 7. 27.
728x90
반응형
#include <stdio.h>

int main()
{
	int* bss;//지역 변수는 스택 영역
	printf("%p\n", bss); //포인터에 저장된 값 (=주소)
	printf("%p\n", &bss); //포인터의 주소 값

	*bss = 3;
	printf("inner bss is : ");
	printf("%d\n", *bss); //포인터가 가리키는 주소에 저장된 값
	//bss가 가리키는 공간이 없는데 거기에 3을 넣으라고 하니 아래로 프로그램 종료
	return 0;
}

출력:
C:\C>bss.exe
00000001
00AFFE14
inner bss is :
C:\C>

--------------------

#include <stdio.h>

int main()
{
	int mem; //스택 영역
	int* bss = &mem; //스택 영역

	printf("%p\n", bss); //포인터에 저장된 값 (=주소)
	printf("%p\n", &bss); //포인터의 주소 값
	printf("inner bss is : ");

	*bss = 3;
	printf("%d\n", *bss); //포인터가 가리키는 주소에 저장된 값
	return 0;
}

출력:
C:\C>bss.exe
010FFE98
010FFE9C
inner bss is : 3
C:\C>

--------------------

출처:http://korea.gnu.org/manual/release/as/as-ko_4.html
text 섹션은 0 번 주소에서 시작하며 data 섹션은 0x4000000에 있으며, bss 섹션은 data 섹션 뒤에 온다.
data section : 정적 변수, 전역 변수

#include <stdio.h>

int main()
{
	static int* bss_1;
	printf("bss_1 : %p\n", bss_1); //포인터에 저장된 값 (=주소)
	printf("&bss_1 : %p\n", &bss_1); //포인터의 주소 값

	static int* bss_2;
	printf("bss_2 : %p\n", bss_2); //포인터에 저장된 값 (=주소)
	prinf("&bss_2 : %p\n", &bss_2); //포인터의 주소 값
	return 0;
}

출력:
C:\C>bss.exe
bss_1 : 00000000
&bss_1 : 00713120
bss_2 : 00000000
&bss_2 : 00713124
C:\C>
00000000 : 아무것도 안가르킨다

--------------------

지역변수는 메모리의 Stack Segment에 저장되며 선언된 함수가 종료되면 메모리에서 사라진다.

 

그리고 초기화된 전역변수와 정적변수는 Data Segment에 저장된다.

Data Segment는 ROM(Read Only Memory)에 있어서 한번 선언되면 값을 수정할 수 없는 문제가 생긴다.

따라서 Data Segment는 RAM(Random Access Memory)에 복사한 후 런타임에서 수정되는 값은 RAM에 저장한다.

즉 Data Segment는 ROM, RAM 두 영역 모두를 필요로 한다.

대신 프로그램이 끝날 때까지 값이 저장되어 있다.

 

마지막으로 초기화되지 않은 전역변수와 정적변수는 BSS Segment에 저장된다.

BSS Segment에 있는 변수들은 스타트업(Startup.s)시에 reset핸들러가 BSS Segnment의 변수들을 0으로 채우는 과정을 거친다.

따라서 BSS Segment에 속하는 전역변수는 자동으로 0으로 초기화된다.

 

Code

Data

Bss

Heap

Stack

 

출처:https://hydroponicglass.tistory.com/182

728x90
반응형

'코드 > C++' 카테고리의 다른 글

GetPixel  (0) 2022.07.27
참조 (Ampersand)  (0) 2022.07.27
함수 재정의와 함수 오버라이딩(virtual)  (0) 2022.07.27
pixel color fast  (0) 2022.07.27
CMD ASLR : 임의 기준 주소  (0) 2022.07.27

댓글