동적메모리 할당(dynamic memory allocation) : 프로그램이 실행 도중에 동적으로 메모리를 할당받는 것
- 필요할 때 필요한 만큼만 할당받을 수 있기 때문에 메모리 효율적 사용 가능
<과정>
(1) 할당받을 크기 결정 후 라이브러리 함수를 호출하여 운영 체제에게 메모리를 요청
(2) 충분한 메모리가 존재하면 위의 요청이 승인되고 메모리가 할당됨
(3) 프로그램 : 할당된 메모리 사용
(4) 사용이 끝나면 메모리를 다시 운영체제에 반납함
- 반납하지 않으면 다른 프로그램이 동적 메모리를 사용할 수 없게 됨
<C언어>
- malloc( )과 free( ) 라고 하는 라이브러리 함수 사용
malloc( ) 과 free( )를 C++에서 사용할 경우 아래와 같이 사용한다
#include <iostream>
using namespace std;
int main(){
const int MAX_SIZE = 100;
int *pi; //동적메모리를 가리키는 포인터
pi = (int *)malloc(MAX_SIZE * sizeof(int));
for(int i = 0; i< MAX_SIZE <i++)
*pi=0; //동적메모리 사용
free(pi); //동적메모리 반납
return 0;
}
- malloc( ) 함수의 인수는 반드시 바이트 단위의 크기여야함
- malloc( )이 반납하는 void형 포인터를 int형 포인터로 변환하여 사용해야함
<C++>
new와 delete라는 전용 연산자 사용
#include <iostream>
using namespace std;
int main() {
int *pi; //동적메모리를 가리키는 포인터
pi = new int[100]; //동적 메모리 할당 (크기가 100인 동적 배열 생성)
for (int i = 0; i < 100; i++)
*(pi + i) = 0; //동적메모리 사용
delete[] pi; //동적메모리 반납 (동적배열 반납)
return 0;
}
(1) 동적메모리 할당 - new 연산자 사용
동적 메모리 할당 성공 -> new는 할당된 메모리 블록을 가리키는 포인터 반환
실패 -> NULL이 반환
따라서 반환값이 NULL인지 검사할 것
(2) 동적메모리 사용
- 동적 메모리 공간은 이름이 없기 때문에 포인터를 이용하여 사용가능
- 반환된 포인터를 통하여 메모리 블록에 데이터를 쓰고 읽음
int *pia = new int[100]; //크기가 100인 int 형 동적배열 할당
//동적 메모리 사용
*(pia+i)=0; //동적으로 할당된 배열의 i번째 원소에 정수 0이 저장
pia[i]=0; //동적으로 할당된 배열의 i번째 원소에 정수 0이 저장
(3) 동적 메모리 반납 - delete 사용
- 동적 메모리 공간이 더 이상 필요가 없는 경우에는 명시적으로 동적 메모리를 반납해야함
- delete의 대상은 할당된 메모리 블록을 가리키는 포인터
delete pi; //동적 할당 int형 공간 반납
delete[] pia; //동적 할당 배열 반납
'Computer Science > Programming Language' 카테고리의 다른 글
[C++] 함수 호출 시 인수 전달 방식 (0) | 2020.06.13 |
---|---|
[C++] 참조자(reference) (0) | 2020.06.13 |
[C/C++] 변수 (지역변수, 전역변수) (0) | 2020.06.10 |
[C++] 디폴트 매개변수 (default parameter) (0) | 2020.06.10 |
[JAVA] 데이터타입 - 참조 타입 (0) | 2020.06.04 |