3가지 메모리 공간에 있는 3가지 배열

JangDongyul·2022년 2월 10일
0

지난 시간에 프로세스 메모리 구조에 대해 설명드렸습니다

포인터 변수와 메모리의 관계 클릭!

뒤의 내용이 이해 안가면 앞의 링크를 참고하세요



오늘은 아래의 3가지 배열을

프로세스 메모리 구조와 연관지어 말씀드리겠습니다.

1. 배열이 스택 세그먼트에 있는 경우입니다

이 경우, 지역변수가 담기는 스택 공간에

배열을 담을 공간을 만든 경우입니다.

2. 배열이 텍스트 세그먼트에 있는 경우입니다.

우변의 "aaaaa"는 문자열 상수(문자열 리터럴)입니다.

리터럴 상수는 Text Segment에 저장됩니다.

좌변은 main( ) 함수 내에 선언된 포인터 변수 b입니다.

함수 내에 선언된 변수는 지역변수이므로, Stack Segment에 위치합니다.

포인터 변수는 주소를 담는 변수이므로, 당연히 배열을 담을 공간이 없으니,

Stack에 있는 지역변수이자 포인터 변수인 b가

Text Segment 에 있는 문자열 상수 "aaaaa"를 가리키고 있는 것입니다.

가리킨다는 의미는 가리키는 곳의 주소를 값으로 가지고 있다는 것을 의미합니다.

포인터 변수는 주소를 담는 변수고, 배열을 담을 공간은 없으니까요.

3. 배열이 힙 세그먼트에 있는 경우입니다


포인터 변수에 배열을 담을 공간이 없으므로
(포인터 변수는 변수의 주소 또는 배열의 맨 앞의 요소의 주소를 담을 공간만 있습니다.)

동적할당을 통해 Heap 영역에 공간을 받은 것입니다.

(char*)malloc(10 * sizeof(char))

를 해석해보면

char 크기의 동적 공간을 10칸 할당 받는데
malloc 함수는 이 10칸 중 첫번째 칸인 cp[0]의 주소를 반환합니다.

그리고 malloc 함수는 (void*) 타입을 리턴하는데

동적할당공간의 주소를 받는 cp가 char* 타입이니

좌변과 우변의 타입을 동일하게 맞춰줘야 합니다.

malloc 함수 앞에
(char*) 으로 형변환을 해준 것이지요



이 글은 동아리 튜터링을 하면서 정리한 글이기에

Medium 동아리 블로그 글과 이어지며

Medium 개인 블로그에도 같이 게시했습니다

0개의 댓글