래디오
412
2019-04-25 21:48:19 작성 2019-04-28 08:57:20 수정됨
3
598

힙 메모리의 끝은?


안녕하세요 새내기 개발자 입니다.


제가 프로그램을 만드는 것중에 힙을 좀 먹을거같은게 있어서, 힙이 어디까지 허용하는지 알아보려고 테스트를 좀했는데, 코드는 아래와같습니다.

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 먹을수 있는데 이정도면 괜찮을까요?

1
  • 답변 3

  • Deer Hunter
    328
    2019-04-26 05:29:20

    1. 네, 가용한 memory 크기를 넘을 경우 disc로 memory paging이 되는데 그것으로 보이네요.

    2. 설정된 paging file size 크기에 따릅니다.

    3. 해당 사항은 해당 프로그램을 사용할 실제 사용자들의 이용환경(laptop) 및 프로그램의 용도등에 의존적인 것이므로, 이러한 사항들을 고려하여 결정해야 할것 같습니다.

  • 래디오
    412
    2019-04-28 08:53:24 작성 2019-04-28 08:59:52 수정됨

    To. Deer Hunter

    페이징 파일 크기에 들어가 봤더니 1280MB(약 1.2GB) 정도 잡혀있습니다.

    제가 위 게시물에서 언급한 걸 보시면 20기가까지도 먹었는데, 이 현상이 이 페이징 용량을보고선 설명이 안됩니다.

    뭔가 더 다른게 있는건가요?

  • Deer Hunter
    328
    2019-04-30 00:56:36

    찾아보니 최근 Windows version에서는 system에 의한 memory paging size 자동 조정이 기본 설정이라고 하네요.

    아마도 Virtual memory 설정화면 내에 "Automatically manage paging file size for all drives"이 선택되어 있을 것입니다.

    그에 따른 것으로 예상이 되며, 실제로 program을 구동시킨 상태에서 paging file size를 확인해보시면 될것 같습니다.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.