오븐 노트

[C++] 동적 할당 #1 본문

Develop/C++

[C++] 동적 할당 #1

오 븐 2022. 10. 6. 16:58
#include <iostream>
using namespace std;

// 메모리 구조 복습
// - 실행할 코드가 저장되는 영역 -> 코드 영역
// - 전역(global)/정적(static) 변수 -> 데이터 영역
// - 지약 변수/매개 변수 -> 스택 영역
// - 동적 할당 -> 힙 영역

// ex)
// - MMORPG 동접 1명-5만명, 몬스터 1마리-500만 마리
// - 몬스터 생성 이벤트 -> 5분 동안 몬스터 10배

// - 스택 영역
// -- 함수가 끝나면 같이 정리되는 불안정한 메모리
// -- 잠시 함수에 매개변수를 넘긴다거나 잠깐 사용하는 용도로는 좋음

// - 메모리 영역
// -- 프로그램이 실행되는 도중에는 무조건 사용되고 있는 영역

// - 힙 영역
// -- 필요할 때만 사용하고, 필요없으면 반납할 수 있는
// -- 스택과는 다르게 우리가 생성 / 소멸 시점을 관리
// 동적 할당과 연관된 함수 / 연산자 : malloc, free, new, delete, new[], delete[]

class Monster
{
public:
    int _hp;
    int _x;
    int _y;
};

int main()
{
    // Monster monster[500 * 10000]; // 스택 오버플로우. 전역으로 옮기면 해결되지만 항상 고정된 메모리를 요구하므로 낭비가 심함.

    // 유저 영역 [메모장] [LOL] [곰플레이어] 등 일반적인 프로그램
    // ---------------------------------------
    // 커널 영역 (Windows 등의 핵심 코드)

    // 동적 할당 대체적인 움직임
    // 유저 영역 ) 운영체제에서 제공하는 API 호출
    // 커널 영역 ) 메모리를 할당하여 건네줌
    // 유저 영역 ) 받음

    // C++에서는 기본적으로 CRT(C런타임 라이브러리)의 [힙 관리자]를 통해 힙 영역 사용
    // 단, 정말 원한다면 우리가 직접 API를 통해 힙을 생성하고 관리 할 수 있음 (MMORPG 서버 메모리 풀링)

    #ifdef _WIN64
        typedef unsigned __int64 size_t;
    #else
        typedef unsigned int     size_t;
    #endif
    size_t
    malloc();

    return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] 동적할당 #3  (0) 2023.02.08
[C++] 동적할당 #2  (0) 2023.02.01
[C++] 객체지향 마무리  (0) 2022.10.06
[C++] 연산자 오버로딩 #1 ~ 2  (0) 2022.10.05
[C++] 초기화 리스트  (0) 2022.10.05