728x90
반응형
동적 메모리 할당
정적 할당
변수 선언을 통해 필요한 메모리 할당
동적 할당
필요한 양이 예측되지 않는 경우. 프로그램 작성시 할당 받을 수 없음
실행중에 힙 메모리에서 할당
-> 힙으로부터 할당 받는다.
C 언어의 동적 메모리 할당
할당 : malloc
해제 : free
위 두개 라이브러리 함수를 사용한다.
C++의 동적 메모리 할당/ 반환
new 연산자
기본타입 메모리 할당, 배열 할당, 객체 할당, 객체배열 할당
객체의 동적 생성 - 힙 메모리로부터 객체를 위한 메모리 할당 요청
객체할당시 생성자 호출
delete 연산자
new로 할당받은 메모리 반환
객체의 동적 소멸 - 소멸자 호출 뒤 객체를 힙에 반환한다.
+ 메모리
1. 코드영역 : 코드
2. 데이터 영역: 전역변수, static 변수( 프로그램 시작시 할당, 프로그램 종료시 소멸)
3. 힙(heap)영역 : 동적할당영역(new로 할당, delete 로 해제)
4. 스택(stack) 영역 : 매개변수, 지역변수(해당 함수 실행 시 할당, 함수 종료 시 해제)
변수와 클래스 배열 등은 stack 영역(정적할당, 컴파일시에 할당)
동적할당은 런(실행)시에 할당하고 직접 접근 불가.
그러므로 스택영역에 포인터 변수를 만들어 놓고 접근한다.
new 와 delete 연산자
C++ 의 기본 연산자이다.
new/delete 연산자 사용형식
new
데이터타입 *포인터변수 = new 데이터 타입;
delete
delete 포인터변수
new/delete의 사용
int *plnt = new int;
delete pInt;
C++ 메모리 할당 예제
#include <iostream>
#include <string>
using namespace std;
int main() {
int* p;
p = new int[5];
int n;
if (!p) {
cout << "메모리 할당 불가";
return 0;
}
for (int i = 0; i < 5; i++) {
p[i] = i+1;
n = p[i];
cout << "*p = " << p[i] << '\n';
cout << "n = " << n << '\n';
}
delete []p;
}
아래와 같이 활용할 수 있다.
int main() {
cout << "입력할 정수 개수? : ";
int n;
cin >> n; // 정수 개수 입력
if (n <= 0) return 0;
int* p = new int[n];
if (!p) {
cout << "메모리 할당 불가";
return 0;
}
for (int i = 0; i < n; i++) {
cout << i + 1 << "번째 정수 : " ;
cin >> p[i];
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += p[i];
}
cout << "평균 : " << sum / n << endl;
delete []p;
}
728x90
반응형
'Archive > Develop' 카테고리의 다른 글
[ Docker ] Docker hub 를 이용해 Portainer 이미지 다운받기 (0) | 2021.04.08 |
---|---|
[ C++ ] 객체의 동적 생성 및 반환 (0) | 2021.04.06 |
[ Django ] Django Mobile Debugging | 장고 서버 모바일 | Django IP 지정 (0) | 2021.04.05 |
[ Oracle ] 서브쿼리(SubQuery) | 서브쿼리 예제 (0) | 2021.04.05 |
[ Django ] Django Tutorial 001 | DjangoProject 환경 구축 (0) | 2021.03.31 |