힙 메모리 오류 발생시키기

dudtkd4567의 이미지

메모리 할당 가능한 최대 크기를 테스트하고 싶어서
일부러 오류를 일으켜 봤습니다.

기본적으로 스텍, 힙 둘다 1MB가 잡혀있기 때문에 그 이상을 잡으려 하면 오류가 납니다.

[스텍]

char test[10000000];

[힙]

char* test = (char*)malloc(10000000);

근데 스텍은 이렇게 하면 런타임 오류가 뜨는데,
힙은 몇천만Byte를 넣든(int범위내) 별 문제 없이 되더라고요.

힙을 고의로 메모리 과다할당 시켜서 오류뜨게 하려면 어떻게 해야 되나요?

익명 사용자의 이미지

Fire_Bird의 이미지

냉무..

doraq의 이미지

실제 할당을 안합니다.
할당후 사용해야 됩니다. 즉, 값을 써 넣어야죠.
그리고 그런 큰 사이즈로는 안될거고, 그 크기에서부터 시작해서 줄이면서 계속 할당을 해야죠
메모리상에 그렇게 연속적인 공간은 거의 없으니까요.

slee0303의 이미지

스택은 크기가 정해져 있습니다.
이 한계를 벗어나면 스택 오버플로우가 나게 되죠.
힙 메모리는 물리적 메모리가 허용하는 한 임의로 할당할 수 있죠.

bushi의 이미지

뭔가 촛점이 어긋난 것 같습니다.

기술적으로 말한다면, 가상 메모리에 연속적인 공간이 충분하고 물리 메모리(disk swap 포함)에 쓰지 않는 공간의 합이 충분할 때까지겠죠.

rich OS 에선 on-demand alloc 을 제공하는데, 물리 메모리 공간은 나중에 실제로 접근하려 할 때 매핑하기로하고 일단 가상 메모리 공간만 alloc 합니다.

뭐가 어찌됐건 간에 OS 수준에서 사용자 malloc 을 제한하는 것과 비스무리한 상황이라면 (리눅스를 예로 들면 ulimit -m 을 unlimited 에서 1MiB 로 바꿨다면),
물리 메모리 공간 어쩌고 on-demand alloc 어쩌고 매핑 어쩌고 등등 다 때려 치고,
가상 메모리 공간의 alloc 부터 제한이 가해져야하지 않겠냐 ... 라는게 질문의 내용 같습니다만.
(물론, 진짜 리눅스였다면 어플의 stack 이건 heap 이건 OS 레벨에선 똑같은 malloc 이니 힙이 어쩌고 스택이 어쩌고 따지는게 의미 없겠지만요.)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.