#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;
}
a : 데이터 세그먼트
-> 값이 정해진 전역 변수
b : 데이터 (rodata) 세그먼트
-> 값이 정해진 전역 변수
c : BSS 세그먼트
-> 값이 정해지지 않은 전역 변수
d : 스택 세그먼트
-> foo 함수의 지역 변수
e : 힙 세그먼트
-> malloc으로 메모리를 동적 할당을 받았음
foo : 코드 세그먼트
-> 함수 코드
d_str : 데이터 (rodata) 세그먼트
상수 문자열
const char data_rostr[] = “readonly_data”; // rodata
위와 같이 앞에 const 가 붙으면 data_rostr[] 와 "readonly_data" 모두 rodata 세그먼트입니다
하지만 만일
const char *b[] = "d_str";
와 같이 b -> *b로 바뀔 경우, 값이 정해진 전역 변수이기 때문에 데이터 세그먼트가 맞습니다