C++에서 메모리 할당 및 할당 해제
컴파일러는 Java 및 Python과 같은 다른 프로그래밍 언어의 변수에 할당된 메모리를 자동으로 제어합니다. 그러나 C++에서는 그렇지 않습니다.
생성 이후 메모리 할당 및 할당 해제는 C++ 언어에 통합되었습니다. 프로그램 실행 중에 사용할 메모리 할당, 더 이상 필요하지 않을 때 할당된 메모리 해제, 프로그램 종료 시 할당된 메모리에 어떤 일이 발생하는지 결정하는 등 프로그램에서 동적 메모리 관리를 담당합니다.
메모리 할당 및 할당 해제는 페이징 기술을 사용하는 운영 체제의 가상 메모리 관리자에 의해 관리됩니다.
C++ 프로그래밍 언어는 메모리를 할당하고 해제하는 여러 기능을 제공합니다. 이러한 기능에는 malloc
, calloc
, realloc
, free
, new
및 delete
가 포함됩니다.
new
및 delete
연산자부터 시작하겠습니다.
new
및 delete
연산자를 사용하여 메모리 할당 및 할당 해제
new
연산자
new
연산자는 지정된 유형의 개체에 대한 메모리를 할당합니다. 먼저 메모리에 새 개체를 만든 다음 값으로 초기화할 수 있습니다.
값을 지정하지 않으면 기본 생성자를 사용하여 개체를 초기화합니다. new
연산자의 구문은 다음과 같습니다.
pointer - variable = new data - type
이 경우 type 데이터 유형의 포인터가 사용됩니다. 배열을 포함한 모든 내장 데이터 유형 또는 구조 및 클래스를 포함한 모든 사용자 정의 데이터 유형을 데이터 유형으로 사용할 수 있습니다.
프로그램 실행 중에 사용할 수 있는 메모리가 부족하면 어떻게 합니까?
힙에 할당할 메모리가 충분하지 않으면 std::bad alloc
유형의 오류 메시지가 발생하여 새 요청이 실패합니다. 그러나 nothrow
가 new
연산자와 함께 사용되는 경우 시나리오에서 NULL 포인터를 반환합니다. 결과적으로 프로그램을 실행하기 전에 new
의 포인터 변수를 찾는 것이 필수적입니다.
삭제
연산자
delete
연산자는 new
연산자가 할당한 메모리를 해제하거나 할당 해제합니다. delete
연산자의 구문은 다음과 같습니다.
delete pArray;
여기서 pArray
는 new
연산자로 할당된 배열을 나타냅니다.
일반적으로 delete
연산자는 두 가지 기능을 수행합니다.
- 먼저 소멸자를 호출하여 객체를 파괴합니다.
- 메모리 할당을 해제합니다.
new
및 delete
연산자 사용 예:
#include <iostream>
using namespace std;
int main() {
int* x;
x = new int;
*x = 34;
cout << *x << endl;
delete x;
return 0;
}
이 예제에서는 먼저 new
연산자를 사용하여 메모리를 할당한 다음 delete
연산자를 사용하여 메모리를 할당 해제했습니다.
위에서 언급한 코드의 작동을 확인하려면 여기를 클릭하십시오.
C 표준 라이브러리를 사용하여 메모리 할당 및 할당 해제
C 표준 라이브러리는 malloc()
, free()
및 realloc()
을 사용하여 메모리 할당 및 할당 해제를 더 쉽게 만듭니다. 이러한 함수는 C++ 언어에서 사용할 수 있습니다.
malloc()
함수
malloc()
은 지정된 크기의 연속 메모리 공간을 할당하는 C++ 프로그래밍 언어의 함수입니다. 변수, 배열 및 기타 데이터 구조에 대한 동적 메모리를 할당하는 데 사용됩니다.
malloc()
함수는 세 가지 인수를 사용합니다.
- 첫 번째 인수는 할당할 바이트 수를 지정합니다.
- 두 번째 인수는 할당할 데이터 유형을 지정합니다.
- 세 번째 인수는 할당된 데이터를 저장할 주소입니다.
free()
함수
C++의 free()
함수는 이전에 malloc()
연산자를 사용하여 할당된 메모리 영역을 해제하거나 할당 해제합니다. 나중에 재사용할 수 있도록 이 메모리 영역을 시스템에 반환합니다.
realloc()
함수
realloc()
은 메모리 블록의 크기를 변경할 수 있는 함수입니다. 할당의 크기를 변경하는 데 사용되며 일반적으로 할당이 소진되었을 때 확대합니다.
realloc()
은 이전 할당에 대한 포인터, 새 할당에 대한 정보 및 새 할당에 대한 새 크기의 세 가지 매개 변수를 사용합니다.
old 포인터는 재할당 전 원래 할당된 메모리 블록을 가리키고, 새 정보는 재할당 후 새로 할당된 메모리를 의미합니다. 새 크기는 길이를 바이트 단위로 설정하거나 이 매개변수가 제공되지 않은 경우 항목 수를 설정하여 이 블록에 할당해야 하는 공간의 양을 지정합니다.
표준 라이브러리를 사용한 동적 메모리 할당의 이점
라이브러리는 다음과 같은 동적 메모리 관리를 위한 여러 유형의 함수를 제공합니다.
- 힙에서 메모리 블록 할당 및 해제
- 할당된 메모리 블록 간에 데이터 복사
- 런타임에 할당된 메모리 블록의 크기에 액세스합니다.
- 할당된 메모리 블록이 비어 있는지 확인; 그리고
- 힙의 모든 블록을 한 번에 해제합니다.
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook