찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

C++ 동적 메모리

수집 154
읽다 53379
업데이트 시간 2016-09-11

C++에서 동적 메모리가 작동하는 방식을 이해하는 것은 자격을 갖춘 C++ 프로그래머가 되는 데 필수적입니다. C++ 프로그램의 메모리는 두 부분으로 나뉩니다.

  • 스택: 함수 내부에 선언된 모든 변수는 스택 메모리를 차지합니다.

  • 힙: 프로그램에서 사용되지 않은 메모리이며 프로그램이 실행되는 동안 동적으로 메모리를 할당하는 데 사용할 수 있습니다.

정의된 변수에 특정 정보를 저장하는 데 필요한 메모리 양을 미리 예측할 수 없는 경우가 많습니다. 필요한 메모리 크기는 런타임에 결정되어야 합니다.

C++에서는 할당된 공간의 주소를 반환하는 특수 연산자를 사용하여 특정 유형의 변수에 대해 런타임 시 힙에 메모리를 할당할 수 있습니다. 이 연산자는 new 연산자입니다.

동적으로 메모리를 할당할 필요가 없다면 delete 연산자를 사용하여 이전에 new 연산자가 할당한 메모리를 삭제할 수 있습니다.

new 및 delete 연산자

다음은 new 연산자를 사용하여 모든 데이터 유형에 대해 메모리를 동적으로 할당하기 위한 일반적인 구문입니다.

new data-type;

여기에서 data-type은 배열을 포함한 모든 내장 데이터일 수 있습니다. 유형도 가능합니다. 클래스나 구조를 포함한 사용자 정의 데이터 유형이어야 합니다. 먼저 내장 데이터 유형을 살펴보겠습니다. 예를 들어, double 유형에 대한 포인터를 정의한 다음 실행 시 할당되는 메모리를 요청할 수 있습니다. 다음과 같이 new 연산자를 사용하여 이를 수행할 수 있습니다.

double* pvalue  = NULL; // 初始化为 null 的指针
pvalue  = new double;   // 为变量请求内存

여유 저장 공간이 모두 소진된 경우 메모리 할당이 성공하지 못할 수 있습니다. 따라서 new 연산자가 NULL 포인터를 반환하는지 확인하고 다음과 같은 적절한 조치를 취하는 것이 좋습니다.

double* pvalue  = NULL;
if( !(pvalue  = new double ))
{
   cout << "Error: out of memory." <<endl;
   exit(1);

}

malloc() 이 함수는 C 언어에서 나타났고 여전히 C++에도 존재하지만, 수행하지 않는 것이 좋습니다. 가능한 한 malloc() 함수를 사용하십시오. malloc() 함수와 비교하여 new의 주요 장점은 new가 메모리를 할당할 뿐만 아니라 객체도 생성한다는 것입니다.

동적으로 메모리가 할당된 변수가 더 이상 필요하지 않다고 생각되면 언제든지 아래와 같이 삭제 연산자를 사용하여 해당 변수가 차지하는 메모리를 해제할 수 있습니다.

delete pvalue;        // 释放 pvalue 所指向的内存

위 내용은 다음에서 사용됩니다. new 및 delete 연산자를 사용하는 방법을 보여주는 예제 개념:

#include <iostream>
using namespace std;

int main ()
{
   double* pvalue  = NULL; // 初始化为 null 的指针
   pvalue  = new double;   // 为变量请求内存
 
   *pvalue = 29494.99;     // 在分配的地址存储值
   cout << "Value of pvalue : " << *pvalue << endl;

   delete pvalue;         // 释放内存

   return 0;
}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Value of pvalue : 29495

배열의 동적 메모리 할당

문자 배열( 20자 문자열) 메모리를 할당하려면 위 예제의 구문을 사용하여 다음과 같이 배열에 대한 메모리를 동적으로 할당할 수 있습니다.

char* pvalue  = NULL;   // 初始化为 null 的指针
pvalue  = new char[20]; // 为变量请求内存

방금 생성한 배열을 삭제하려면 명령문은 다음과 같습니다.

delete [] pvalue;        // 删除 pvalue 所指向的数组

아래는 다차원 배열에 메모리를 할당할 수 있는 new 연산자의 일반적인 구문입니다.

int ROW = 2;
int COL = 3;
double **pvalue  = new double* [ROW]; // 为行分配内存

// 为列分配内存
for(int i = 0; i < COL; i++) {
    pvalue[i] = new double[COL];
}

다차원 배열 메모리 해제:

for(int i = 0; i < COL; i++) {
    delete[] pvalue[i];
}
delete [] pvalue;

객체의 동적 메모리 할당

객체는 단순 데이터와 다르지 않습니다. 유형. 예를 들어, 이 개념을 명확히 하기 위해 객체 배열을 사용하는 아래 코드를 살펴보세요.

#include <iostream>
using namespace std;

class Box
{
   public:
      Box() { 
         cout << "调用构造函数!" <<endl; 
      }
      ~Box() { 
         cout << "调用析构函数!" <<endl; 
      }
};

int main( )
{
   Box* myBoxArray = new Box[4];

   delete [] myBoxArray; // Delete array

   return 0;
}

4개의 Box 객체가 포함된 배열에 메모리를 할당하려는 경우 생성자는 4번 호출됩니다. 마찬가지로 객체가 삭제되면 소멸자도 동일한 횟수(4번) 호출됩니다.

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

调用构造函数!
调用构造函数!
调用构造函数!
调用构造函数!
调用析构函数!
调用析构函数!
调用析构函数!
调用析构函数!
핫 AI 도구
Undress AI Tool
Undress AI Tool

무료로 이미지를 벗다

AI Clothes Remover
AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undresser.AI Undress
Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

Stock Market GPT
Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

인기 있는 도구
메모장++7.3.1
메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6
드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전
SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)