아래 코드의 실행파일 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 세그먼트로, 초기화된 전역변수는 데이터 세그먼트로, 그리고 함수에 선언된 지역변수는 런타임에서만 세그먼트에 저장된다는 것을 알 수 있다.

'C' 카테고리의 다른 글

나만의 assert 만들기  (0) 2025.04.14
Object file..  (0) 2025.01.14
Why is the number of array elements smaller than minus value?  (0) 2023.04.06
array length as parameter  (0) 2022.11.09
parameter 실수  (1) 2022.11.08

+ Recent posts