흔히 많이 쓰는 Java, c#, python 등 고수준 언어들 같은 경우 가비지 콜렉터(Garbage Collector (일명:GC))를 사용하여
메모리 관리를 자동으로 해줍니다.
하지만 C와 C++은 위의 개발 언어와 달리 포인터를 사용하여 메모리를 직접 관리할 수 있습니다.
포인터를 잘 사용한다면 메모리를 더욱 효율적으로 관리할 수 있고, 잘못 사용한다면 메모리 누수가 날수 있습니다.
(그래서 C C++이 어렵다고 하는 사람이 많습니다.)
C에서는 malloc()과 free()라는 함수를 통해서 메모리를 할당하고 해제하였는데
C++에서는 new와 delete라는 연산자를 활용하여 메모리를 관리합니다.
차이점은 new는 malloc() 함수와 달리 메모리 크기를 정하지 않고 동적으로 할당합니다.
new와 delete 사용법 (메모리 할당 및 해제)
타입 *변수명 = new 타입; //메모리 할당
delete 변수명 //메모리 할당해제
#include <iostream>
using namespace std;
int main(){
int *point = new int; //메모리 동적할당
*point = 100;
cout << *point;
delete point; //메모리 할당해제
}
메모리를 설정하고 해제하는 방법은 위와 같습니다.
포인터를 설정하고 해제하는 방법은 C언어와 다르지만 포인터를 사용하여 동적으로 생성한 객체에 접근하는 방법이나 활용하는 방법은 C언어와 같습니다. 하나의 포인터는 위와 같이 설정해주면 되지만 배열 형태로 메모리를 설정해 준 것은 반드시 배열 형태로 메모리를 해제시켜주어야 합니다.
[배열] 메모리 할당 및 해제
타입 *변수명 = new 타입[크기]; //배열 메모리 할당
delete[] 변수명 //배열 메모리 할당해제
#include <iostream>
using namespace std;
int main(){
int *point = new int[10]; //배열 메모리 동적할당
for(int i=0; i<5; i++){
point[i] = i;
}
for(int i=0; i<10; i++){
cout << point[i] << endl;
}
delete[] point; //배열 메모리 할당해제
}
주의사항으로
배열로 메모리를 설정해 준 것은 반드시 배열로 메모리를 해제시켜주어야 합니다.
reference : https://coding-factory.tistory.com/
'개발 언어 > C,C++,C#' 카테고리의 다른 글
C# 웹 컴파일러 / C# 실습해보기 (0) | 2020.02.09 |
---|---|
C# URL 가져와서 파라미터 자르기 (호출) (0) | 2020.02.08 |
c# 데이터 셋, 데이터 테이블, 데이터 로우 (data set, data table, data row) (0) | 2019.12.24 |
[C#] 문자열 - 특정 문자열 위치 값 알아내기 (LastIndexOf() 함수) (0) | 2019.11.20 |
c# 스레드 중단 / thread.abort() (0) | 2019.09.03 |
댓글