#include <stdlib.h>
int a = 0xa;
const char b[] = "d_str";
int c;
int foo(int arg) {
int d = 0xd;
return 0;
}
int main()
{
int *e = malloc(sizeof(*e));
return 0;
}
Q1. d가 위치하는 세그먼트는 어디인가?
d는 함수 안의 지역 변수이다. 그러므로 임시 변수들이 저장되는 스택 세그먼트에 위치 할 것 이다.
A1. 스택
Q2. a가 위치하는 세그먼트는 어디인가?
a는 전역 변수이고, 선언과 동시에 값이 초기화 된다. 그러므로 컴파일 시점에 값이 정해진 전역 변수가 위치하는 데이터 세그먼트에 위치 할 것 이다.
A2. 데이터
Q3. foo가 위치하는 세그먼트는 어디인가?
foo 함수는 내부에 실행 가능한 코드를 가지고 있으므로
A3. 코드
Q4. c가 위치하는 세그먼트는 어디인가?
c는 컴파일 시점에 값이 정해지지 않은 전역 변수이므로
A4. BSS 세그먼트
Q5. e가 위치하는 세그먼트는 어디인가?
e에는 malloc() 함수로 할당받은 힙 영역의 메모리의 주소를 저장하고 있으므로
A5. 힙 세그먼트
Q6. b가 위치하는 세그먼트는 어디인가?
b는 상수인 문자열을 저장하고 있는 const char 형 배열이다. 그러므로 읽기 전용 데이터 영역에 위치해야한다.
A6. rodata 세그먼트
Q7. d_str가 위치하는 세그먼트는 어디인가?
문자열은 변하면 안되는 값이다. 그러므로 읽기 전용 데이터 영역에 위치해야한다.
A7. rodata 세그먼트