C

세그먼트

GunwooYun 2023. 4. 13. 21:14

아래 코드의 실행파일 a.out의 세그먼트를 확인해보자.

#include <stdio.h>

int main(int argc, char *argv[])
{
   printf("hello, world\n");
   return 0;
}

 

위 코드의 세그먼트는 다음과 같다.

hello, world

 

다음은 전역변수에 1000개의 값을 갖는 배열을 선언한다.

int arr[1000];

선언한 배열을 초기화 하면 배열은 bss에서 data영역으로 넘어간다.

int arr[1000] = {0x01, };

 

main 함수에 같은 길이의 배열을 선언하고 size를 출력한다.

int brr[1000];

 

이번엔 초기화도 진행해보자.

int brr[1000] = {0x01, };

 

초기화되지 않은 전역변수는 bss 세그먼트로, 초기화된 전역변수는 데이터 세그먼트로, 그리고 함수에 선언된 지역변수는 런타임에서만 세그먼트에 저장된다는 것을 알 수 있다.