C++에서 메모리 할당 및 할당 해제

Muhammad Adil 2023년12월11일
  1. newdelete 연산자를 사용하여 메모리 할당 및 할당 해제
  2. C 표준 라이브러리를 사용하여 메모리 할당 및 할당 해제
  3. 표준 라이브러리를 사용한 동적 메모리 할당의 이점
C++에서 메모리 할당 및 할당 해제

컴파일러는 Java 및 Python과 같은 다른 프로그래밍 언어의 변수에 할당된 메모리를 자동으로 제어합니다. 그러나 C++에서는 그렇지 않습니다.

생성 이후 메모리 할당 및 할당 해제는 C++ 언어에 통합되었습니다. 프로그램 실행 중에 사용할 메모리 할당, 더 이상 필요하지 않을 때 할당된 메모리 해제, 프로그램 종료 시 할당된 메모리에 어떤 일이 발생하는지 결정하는 등 프로그램에서 동적 메모리 관리를 담당합니다.

메모리 할당 및 할당 해제는 페이징 기술을 사용하는 운영 체제의 가상 메모리 관리자에 의해 관리됩니다.

C++ 프로그래밍 언어는 메모리를 할당하고 해제하는 여러 기능을 제공합니다. 이러한 기능에는 malloc, calloc, realloc, free, newdelete가 포함됩니다.

newdelete 연산자부터 시작하겠습니다.

newdelete 연산자를 사용하여 메모리 할당 및 할당 해제

new 연산자

new 연산자는 지정된 유형의 개체에 대한 메모리를 할당합니다. 먼저 메모리에 새 개체를 만든 다음 값으로 초기화할 수 있습니다.

값을 지정하지 않으면 기본 생성자를 사용하여 개체를 초기화합니다. new 연산자의 구문은 다음과 같습니다.

pointer - variable = new data - type

이 경우 type 데이터 유형의 포인터가 사용됩니다. 배열을 포함한 모든 내장 데이터 유형 또는 구조 및 클래스를 포함한 모든 사용자 정의 데이터 유형을 데이터 유형으로 사용할 수 있습니다.

프로그램 실행 중에 사용할 수 있는 메모리가 부족하면 어떻게 합니까?

힙에 할당할 메모리가 충분하지 않으면 std::bad alloc 유형의 오류 메시지가 발생하여 새 요청이 실패합니다. 그러나 nothrownew 연산자와 함께 사용되는 경우 시나리오에서 NULL 포인터를 반환합니다. 결과적으로 프로그램을 실행하기 전에 new의 포인터 변수를 찾는 것이 필수적입니다.

삭제 연산자

delete 연산자는 new 연산자가 할당한 메모리를 해제하거나 할당 해제합니다. delete 연산자의 구문은 다음과 같습니다.

delete pArray;

여기서 pArraynew 연산자로 할당된 배열을 나타냅니다.

일반적으로 delete 연산자는 두 가지 기능을 수행합니다.

  • 먼저 소멸자를 호출하여 객체를 파괴합니다.
  • 메모리 할당을 해제합니다.

newdelete 연산자 사용 예:

#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() 함수는 세 가지 인수를 사용합니다.

  1. 첫 번째 인수는 할당할 바이트 수를 지정합니다.
  2. 두 번째 인수는 할당할 데이터 유형을 지정합니다.
  3. 세 번째 인수는 할당된 데이터를 저장할 주소입니다.

free() 함수

C++의 free() 함수는 이전에 malloc() 연산자를 사용하여 할당된 메모리 영역을 해제하거나 할당 해제합니다. 나중에 재사용할 수 있도록 이 메모리 영역을 시스템에 반환합니다.

realloc() 함수

realloc()은 메모리 블록의 크기를 변경할 수 있는 함수입니다. 할당의 크기를 변경하는 데 사용되며 일반적으로 할당이 소진되었을 때 확대합니다.

realloc()은 이전 할당에 대한 포인터, 새 할당에 대한 정보 및 새 할당에 대한 새 크기의 세 가지 매개 변수를 사용합니다.

old 포인터는 재할당 전 원래 할당된 메모리 블록을 가리키고, 새 정보는 재할당 후 새로 할당된 메모리를 의미합니다. 새 크기는 길이를 바이트 단위로 설정하거나 이 매개변수가 제공되지 않은 경우 항목 수를 설정하여 이 블록에 할당해야 하는 공간의 양을 지정합니다.

표준 라이브러리를 사용한 동적 메모리 할당의 이점

라이브러리는 다음과 같은 동적 메모리 관리를 위한 여러 유형의 함수를 제공합니다.

  1. 힙에서 메모리 블록 할당 및 해제
  2. 할당된 메모리 블록 간에 데이터 복사
  3. 런타임에 할당된 메모리 블록의 크기에 액세스합니다.
  4. 할당된 메모리 블록이 비어 있는지 확인; 그리고
  5. 힙의 모든 블록을 한 번에 해제합니다.
Muhammad Adil avatar Muhammad Adil avatar

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

관련 문장 - C++ Memory