Skip to content

[00분반] 11주차 이론 관련해서 질문있습니다. #16

@csh1668

Description

@csh1668

image
안녕하세요.
수업 내용에 따르면 일반적으로 컴퓨터 프로그램은 실행 시 메모리에 위와 같은 구조로 관리됩니다.
스택 메모리와 힙 메모리는 서로 마주보며 자라는 구조로 되어있습니다.

image
만약 제가 스택 영역에 일정 크기를 넘어가는 메모리를 할당한다면 실행 즉시 Segment fault 에러가 뜹니다.
이는 스택 영역의 크기가 기본적으로 1MB이기 때문에 그렇습니다.

image

그런데 힙 영역에 같은 크기의 메모리를 할당해도 문제가 없는 이유는 무엇인가요?

물론 힙 영역은 스택 영역처럼 크기 제한이 없지만,
스택 메모리나 프로그램 실행 코드 쪽으로 자라기 때문에 일정 이상(물론 컴퓨터 메모리 크기 이하로) 넘어가면,
스택 메모리나 코드 영역에 할당을 해버려서 예외가 발생하거나,
아예 할당에 실패해서 널 포인터를 반환하거나 해야하지 않을까요?

스크린샷 2024-06-17 092152
그럼에도 동적 할당으로는 컴퓨터 메모리에 여유가 있다면 얼마든지 할당할 수 있는 이유가 궁금합니다.

제 생각에는 힙 영역의 자라는 방향이 반대고, 메모리를 동적 할당할 때마다 상한을 지정해주는 방식이 더 직관적이고 나아보입니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions