리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 구분함
int main() { return 31337;}여기서 정수 31337을 반환하는 main함수가 컴파일되면 기계 코드로 변환되는데, 이 기계코드가 코드 세그먼트에 위치하게 됨int data_num = 31337; // data
char data_rwstr[] = "writable_data"; // data
const char data_rostr[] = "readonly_data"; // rodata
char *str_ptr = "readonly"; // str_ptr은 data, 문자열은 rodata
int main() { ... } str_ptr => "readonly"라는 문자열을 가리킴int bss_data;
int main() {
printf("%d\n", bss_data); //0
return 0;
}위의 코드에서 초기화되지 않은 전역 변수인 bss_data가 BSS 세그먼트에 위치하게 됨void func() {
int choice = 0;
scanf("%d", &choice);
if (choice)
call_true();
else
call_false();
return 0;
} 유저가 입력한 choice에 따라 call_true()가 호출될 수도, call_false()가 호출될 수도 있음int main() {
int *heap_data_ptr =
malloc(sizeof(*heap_data_ptr)); // 동적 할당한 힙 영역의 주소를 가리킴
*heap_data_ptr = 31337; // 힙 영역에 값을 씀
printf("%d\n", *heap_data_ptr); // 힙 영역의 값을 사용함
return 0;
}