자료구조 : 메모리 구조

지환·2022년 2월 8일
0

자료구조

목록 보기
2/38
post-thumbnail

출처 | DO IT 자료구조와 함께하는 알고리즘 입분

메모리 구조에 대해서 알아보자.

프로그램을 실행하면 운영체제는 사용할 메모리 영역을 할당한다.
할당하는 메모리 영역은 크게 3가지가 있다. (데이터, 스택, 힙)

데이터 영역

  • 전역 변수와 정적 변수가 할당되는 영역이다.
  • 프로그램을 시작하면 할당, 프로그램을 종료하면 메모리에서 해제된다.

스택영역

  • 함수 호출 시 생성되는 지역 변수와 매개변수가 저장된다.
  • 함수 호출이 완료되면 사라진다.

힙 영역

  • 필요에 따라 동적으로 메모리를 할당핟나.(malloc, calloc)

  • 힙 영역은 할당해야 할 메모리 영역의 크기를 프로그램이 실행하는 동안 (run time) 결정하는 경우에 사용한다.

  • 동적 할당을 통해 생성된 동적 변수를 관리하기 위한 영역이다.

  • calloc, malloc 함수는 힙이라는 특별한 빈 공간에 기억 장소를 확보한다. (&free와 함께 사용한다.)

calloc 함수

  • malloc은 할당과 동시에 초기화를 해주지 않는 반면 calloc은 NULL값으로 초기화를 해준다.

  • 그리고 사용시 인자로 malloc은 (1*sizeof(char)) 처럼 할당할 전체 데이터의 크기가 들어가는 반면,

  • calloc은 (1, sizeof(char)) 로써 첫 번째 인자로 몇 개를 할당할 것인지와 두 번째 인자로써 각 할당된 개수의 크기를 설정한다.

  • calloc 함수는 자료형을 지정한 명령을 사용할 필요가 없다.

  • calloc 함수가 확보하는 것은 특정한 자료형의 객체가 아니라 단순히 메모리 영역이다.

다음 예제를 보자.

#include <stdio.h>
#include <malloc.h>


int main()
{
	int* p;
	p = calloc(1, sizeof(int));
	if (p == NULL)
	{
		printf("메모리가 할당되지 않았습니다.");
	}
	else
	{
		*p = 60;
		printf(" *p = %d\n", *p);
	}

	free(p);
}

<결과>

+배열의 요소 개수 출력하기.

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i, * a, na;
	printf("요소의 개수 : ");
	scanf_s("%d", &na);
	a = calloc(na, sizeof(int)); - 요소 개수가 na인 int형 배열을 생성했다.
	if (a == NULL)
	{
		puts("메모리 확보를 실패했습니다 : ");

	}
	else
	{
		printf("%d개의 정수를 입력하세요 : \n", na);
		for (i = 0; i < na; i++)
		{
			printf("a[%d] : ", i);
			scanf_s("%d", &a[i]);
		}
		printf("요소 값은 다음과 같습니다.\n");
		for (i = 0; i < na; i++)
		{
			printf("a[%d] = %d\n", i, a[i]);
		
		}free(a);
		
		return 0;
	}



}

<결과>

  • a는 배열 사용하기 위해 확보한 메모리의 첫 번째 주소를 가리키는 포인터다.
    a = calloc(na,sizeof(int)); //배열 a를 생성한다라는 의미
profile
아는만큼보인다.

0개의 댓글