데이터 세그먼트 (Data Segment)에는 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치한다.
CPU가 세그먼트의 데이터를 읽을 수 있어야 하므로, 읽기 권한이 부여됩니다.
#include<stdio.h>
struct Man{
int age;
char sex;
int id;
char[12] name;
}
/**
* 아래의 전역 변수들은 초기값이 할당되어있기 때문에,
* Data Segment에 할당되게 된다.
*/
int globalVariable = 10;
Man man = {19, 'M', 201112010, "홍길동"};
int szman = sizeof(Man);
int main(){
// .. 작업 수행 ..
return 0;
}
데이터 세그먼트는 쓰기가 가능한 세그먼트와 쓰기가 불가능한 세그먼트로 다시 분류되는데, 쓰기가 가능한 세그먼트는 전역 변수와 같이 프로그램이 실해오디면서 값이 변할 수 있는 데이터들이 위치합니다.
이런 세그먼트는 Data 세그먼트라고 부릅니다.
반면 쓰기가 불가능한 세그먼트에는 프로그램이 실행되면서 값이 변하면 안되는 데이터들이 위치합니다. 전역으로 선언된 상수가 여기에 포함됩니다.
**전역변수: 프로그램에서 접근 가능한 변수
**정역상수: 전역 상수(Global Constant)는 프로그램 전체에서 접근 가능하며 변경할 수 없는 상수입니다.
아래는 데이터 세그먼트에 포함되는 여러 데이터의 유형입니다.
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() { ... }