힙메모리의 끝은?

dudtkd4567의 이미지

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

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

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: 
첨부파일 크기
Image icon 힙메모리 먹는 이미지.PNG11.41 KB
익명 사용자의 이미지

0. 메모리 관리는 운영 체제와 Runtime library의 몫입니다. 그리고 이들은 때때로 naive한 프로그래머들을 놀래켜 주곤 합니다. 물론 한계는 있지만요.

1. 네. 컴퓨터에는 DRAM 총량보다 더 많은 메모리를 쓸 수 있는 메커니즘이 있지요. Demand paging이라고 합니다.

2. 사실 생각해보면, 메모리를 할당만 받고 전혀 쓰지 않는다면 메모리를 가지고 있을 필요 없잖아요. 적절한 눈속임 테크닉을 활용하면 그런 경우에 정말로 메모리를 주지 않게 만들 수가 있습니다. 꼭 메모리를 써야 하는 경우에만 메모리를 준다는 얘기죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.