season97 2024. 9. 22. 11:16
728x90
반응형

※ C / C++을 이미 알고 있으나 개인적인 복습 및 공부를 위해 포스팅 하는 글이므로

C++에 대한 구체적인 정보를 담고 있지 않습니다.


▶ HEAP 영역

메모리 구조

★ 동적 할당을 한 데이터들은 HEAP영역에 저장된다. 그렇다면 왜 사용할까?

     ㆍ 스택의 용량은 작다. 예시 코드를 보자

//실제게임예시
// MMORPG 동접 1명~5만명, 몬스터 1마리~500만마리
class Monster
{
public:
    int _hp;
    int _x;
    int _y;
};

int main()
{
    Monster monster[500 * 10000];
    return 0;
}

스택의 용량 초과

ㆍ 그럼 전역으로 써봐도 되지않을까??

 

ㆍ 근데 그렇게되면 최대 크기만큼을 항상 고정해줘야 한다.... 게임이 망해서 유저가 1명만 남아도 500만 마리의 공간이 미리 필요한거다... 너무 비효율적

 

ㆍ 또한 전역변수는 사용이 끝나도 반환을 할 수가 없다.

 

※ 스택 영역은  함수가 끝나면 같이 정리되는 불안정한 메모리, 잠시 함수의 매개변수를 넘긴다거나 하는 용도로는 ok

※ 메모리 영역(전역)은 프로그램이 실행되는 도중에는 "무조건"사용 되어야 한다...

 

★ 따라서 필요한 것이 동적할당!

 

ㆍ동적할당과 연관된 함수or연산자:  malloc, free, new, delete, new[], delete[] 

 

 

◆ 동적 할당을 알기 전에 알아둬야 할 것 (접은글)

더보기

 유저 영역 [메모장] [리그오브레전드] [크롬] 등등 유저 프로그램
 =============================
 커널 영역 (Windows등 운영체제의 핵심 코드)

 핸드폰도 마찬가지. 운영체제는 다 비슷
 ㆍ 유저 영역에서 실행되는 프로그램은 다 독립적으로 실행된다(서로의 존재를 아예 모른다)
 ㆍ 서로의 프로그램에 영향을 주지 않게 하기 위해

 
 ※ 유저 영역의 프로그램은 -> 메모리는 커널 영역에 요청을 해서 받아온다
 
 ㆍ 유저 영역) 운영체제에서 제공하는 API 호출
 ㆍ 커널 영역) 메모리 할당해서 건내줌
 ㆍ 유저 영역) ㄳㄳ 잘쓸게요~
  
  → 근데 작업관리자를 열어서 보면 실행되는 프로그램은 한두개가 아니다
  
  ㆍ 큰 데이터를 한번에 일단 요청을 해서 잘라서 쓴다. 
  ㆍ C++에서는 기본적으로 CRT (C런타임 라이브러리) 의 [힙 관리자]를 통해 힙 영역 사용
  ㆍ 단, 정말 원한다면 우리가 직접 API를 통해 힙을 생성하고 관리할 수도 있음 (MMORPG 서버 메모리 풀링)

 


 

 

 

728x90
반응형