*메모리 할당
- 코드영역 : 실행할 프로그램의 코드가 저장되는 메모리 공간
CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행한다.
- 데이터 영역 : 전역변수와 static 변수가 할당되는 영역
프로그램 시작과 동시에 할당되어 종료시 까지 남아있는 특징의 변수가 저장되는 영역
- 힙 영역 : 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기위한 영역
동적 메모리가 할당되는 부분
- 스택 영역 : 지역변수와 매개변수가 할당되는 영역
함수를 빠져나가면 소멸되는 변수를 저장하는 영역
#동적 할당 메모리의 개념
- 프로그램이 메모리를 할당받는 방법
1. 정적(static)
2. 동적(dynamic)
#동적 메모리 할당
- 실행 도중에 동적으로 메모리를 할당받는 것
- 사용이 끝나면 시스템에 메모리를 반납
- score = (int *)
malloc(100*sizeof(int));
- 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용
- malloc() 계열의 라이브러리 함수를 사용
#void *malloc(size_t size)
- size는 byte의 수
- malloc()함수는 메모리 블럭의 첫 번째 byte에 대한 주소를 반환
- 만약 요청한 메모리 공간을 할당할 수 없는 경우에만 NULL값을 반환
#정적,동적 메모리 할당과 해제
#malloc() 함수
- 함수 안에서 이름을 입력받아 메인에 출력
- malloc() - 헤더파일 : stdlib.h (malloc+사촌)
: malloc.h (malloc만 사용)
- 힙 영역의 메모리 공간 할당과 해제
- 할당 void* malloc(size);
/*
malloc함수는 인자로 숫자만 전달받을 뿐이니
할당 되는 메모리의 용도를 알지 못한다.
따라서 메모리의 포인터 형을 결정 못한다.
형변환의 과정을 거쳐서 할당된 메모리의
주소값을 저장!
*/
#free() 함수 : malloc()함수로 사용한 메모리 해제
- void free(포인터 변수명);
- 메모리 해제를 하지 않으면 메모리 부족과 같은 문제를 일으킬 수 있으니 꼭 해제하는 습관을 들이자.
#malloc() 함수 사용 예
*정수
*문자
*학생 점수를 입력 받아보기
#malloc() 함수에 의한 배열 공간 할당
#calloc()함수
#realloc() 함수
#자기 참조 구조체 정의
*자기 참조 구조체(self reference struct)
- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수를 갖는 구조체
*구조체 selfref
- 멤버로 int형 n과 struct selfref *형 next로 구성
- 즉 멤버 next의 자료형은 지금 정의하고있는 구조체의 포인터형
- 구조체 selfref는 자기 참조 구조체
- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수
- 구조체는 자기 자신 포인터를 멤버로 사용할 수 있으나 자기 자신은 사용 불가능
#구조체를 이용한 동적 할당
#두대의 자동차를 입력받아서 메모리 공간을 할당받고 정보를 출력받는 프로그램
'C언어 > C언어' 카테고리의 다른 글
C언어 [헤더파일,이중 포인터,재귀 함수] (0) | 2017.11.10 |
---|---|
C언어 [정렬,이진탐색,매크로] (0) | 2017.11.10 |
C언어 [구조체,구조체 배열,구조체 함수,구조체 포인터] (1) | 2017.11.08 |
C언어 [포인터,포인터 배열,포인터 함수] (0) | 2017.11.04 |
C언어 [(라이브러리,난수 함수),(지역,전역변수),문자열] (0) | 2017.10.30 |