힙메모리의 끝은?
글쓴이: dudtkd4567 / 작성시간: 월, 2019/04/29 - 3:56오후
안녕하세요 새내기 개발자 입니다.
제가 프로그램을 만드는 것중에 힙을 좀 먹을거같은게 있어서, 힙이 어디까지 허용하는지 알아보려고 테스트를 좀했는데, 코드는 아래와 같습니다.
typedef struct memorytest { char a[1000000]; struct memorytest* next; }test; // 1MB test* CreateNextMem(test* m) { m->next = new test; return m->next; } void ChargeMem(test* m) { int i = 0; while (true) { m = CreateNextMem(m); cout << ++i << "MB 할당" << endl; } } int main() { test m; ChargeMem(&m); getchar(); return 0; }
1개당 1MB짜리 구조체를 힙으로 계속 잡으면서 봤는데, 한 2만개까지(20기가) 잡히는거 보고 그냥 콘솔닫았습니다.
허용량이 렘을 한참넘어서니까 이상해서 작업관리자로 렘 용량 먹는걸봤는데, (이미지는 파일로 첨부했습니다.)
메모리 사용량이 2.3GB쯤에서 점점 먹더니 7.8GB쯤에서 왔다갔다 합니다.
알아본 바로는 메모리는 할당량을 넘기면 하드쪽에 가상메모리로 용량을 넘긴다고 들었습니다.
이게 그 현상일까요?
그리고 이 넘기는 용량은 무제한인가요?
제가 실제 돌리는 프로그램이 메모리가 최대 4GB 먹을수 있는데 이정도면 괜찮을까요?
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 11.41 KB |
Forums:
0. 메모리 관리는 운영 체제와 Runtime
0. 메모리 관리는 운영 체제와 Runtime library의 몫입니다. 그리고 이들은 때때로 naive한 프로그래머들을 놀래켜 주곤 합니다. 물론 한계는 있지만요.
1. 네. 컴퓨터에는 DRAM 총량보다 더 많은 메모리를 쓸 수 있는 메커니즘이 있지요. Demand paging이라고 합니다.
2. 사실 생각해보면, 메모리를 할당만 받고 전혀 쓰지 않는다면 메모리를 가지고 있을 필요 없잖아요. 적절한 눈속임 테크닉을 활용하면 그런 경우에 정말로 메모리를 주지 않게 만들 수가 있습니다. 꼭 메모리를 써야 하는 경우에만 메모리를 준다는 얘기죠.
댓글 달기