동적할당
※ 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 서버 메모리 풀링)