C++ 동적메모리 할당으로 런타임메모리 관리

개요

C++ 배열을 이용한 동적메모리 할당 (Dynamic Allocation) 구현 예제 입니다.

런타임에 메모리를 어떻게 관리하는지 공부해 봅시다.

최초 5개의 정수형 배열을 Heap 영역에 동적할당하고, 저장공간이 부족한 경우 2배로 배열의 크기를 늘려가는 방식입니다.

[배열의 동적할당]



동작 순서

1. 처음 배열 5개를 생성하고, 데이터를 삽입

2. 데이터가 5개를 초과하면 새로운 배열을 2배 크기(10개)로 동적할당

 

 

3. 기존 배열의 데이터를 새 배열로 복사 후 신규 데이터는 새 배열에 저장

4. 기존 배열 (5개) 을 삭제하고 새 배열의 주소를 포인터에 저장


소스코드

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int size = 5;
    int pos = 0;

    int *p = new int[size];
    memset(p, 0, sizeof(int)*size);

    while (true)
    {
        cout << "Input number(Exit:0): ";
        int n;
        cin >> n;

        if (n==0)
            break;

        if(pos>=size)
        {
            size *= 2;
            int *p2 = new int[size];
            memset(p2, 0, sizeof(int)*size);

            for(int i=0; i<size/2; i++)
                p2[i] = p[i];

            delete[] p;
            p = p2;
        }

        p[pos] = n;
        pos++;

        cout << "Size:" << size << '\n';
        for(int i=0; i<size; i++)
            cout << p[i] << ' ';
        cout << '\n';
    }

    delete[] p;
    return 0;
}


감사합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기