3월 12일-프로세스 주소 공간(2)

Yullgiii·2024년 3월 12일
0
post-thumbnail

프로세스 주소 공간

프로그램이 실행되는 동안 운영 체제는 프로세스에 주소 공간을 할당하며, 이 공간은 크게 코드, 데이터, 힙, 스택 영역으로 구분된다. 각 영역은 프로그램의 다양한 데이터와 명령어를 저장하고 처리하는 데 특화된 역할을 한다.

초기화하지 않은 변수의 저장 위치: BSS 세그먼트

초기화되지 않은 전역 변수와 정적 변수(static variables)는 BSS(Block Started by Symbol) 세그먼트에 저장된다. 이 세그먼트는 프로그램의 시작 시점에 0으로 초기화되며, 이는 메모리를 효율적으로 사용하기 위한 방법이다. BSS 세그먼트의 사용으로 인해 프로그램의 실행 파일 크기를 줄일 수 있으며, 실제 메모리는 프로그램이 실행될 때 할당된다.

Stack과 Heap의 크기

스택의 크기

스택은 주로 함수의 호출과 반환, 지역 변수의 저장에 사용된다. 스택의 크기는 대부분의 운영 체제에서 프로세스당 사전에 정의된 최대 크기를 가지며, 이 크기는 컴파일 시나 프로세스 시작 시 결정된다. 스택 오버플로우는 스택의 크기를 초과하는 경우 발생하며, 프로그램의 심각한 오류로 이어질 수 있다.

힙의 크기

힙은 동적 메모리 할당에 사용되며, 그 크기는 실행 시간에 프로그램의 요구에 따라 변화한다. 힙의 최대 크기는 시스템의 물리적 메모리와 가상 메모리의 크기에 의해 결정된다. 힙의 메모리 관리는 프로그래머의 책임이며, 힙 오버플로우나 메모리 누수는 메모리 관리가 잘못되었을 때 발생한다.

접근 속도

스택 접근 속도

스택은 컴퓨터의 메모리 구조상 빠르게 접근할 수 있는 LIFO(Last In, First Out) 구조를 가진다. 함수 호출과 같은 구조적인 동작에 최적화되어 있어, 스택 메모리에 접근하는 속도는 매우 빠르다.

힙 접근 속도

힙은 스택보다 접근 속도가 느릴 수 있다. 이는 힙이 동적 메모리 할당을 위해 사용되며 메모리의 할당과 해제 과정에서 추가적인 계산이 필요하기 때문이다. 또한, 메모리 단편화와 같은 현상으로 인해 성능 저하가 발생할 수 있다.

공간 분할의 이유

  • 효율적인 메모리 관리: 각 영역에 특화된 메모리 관리 전략을 적용함으로써, 전체 시스템의 메모리를 효율적으로 사용할 수 있다.
  • 보안 및 안정성 강화: 스택과 힙, 코드 영역 간의 명확한 구분은 프로그램의 안정성과 보안을 강화한다. 예를 들어, 코드 영역을 읽기 전용으로 설정함으로써 악의적인 코드 삽입을 방지할 수 있다.
  • 성능 최적화: 각 영역의 사용 목적에 따른 최적화를 통해 프로그램의 성능을 높일 수 있다. 스택은 함수 호출의 빠른 처리를, 힙은 유연한 메모리 할당을 가능하게 한다.

프로세스 주소 공간의 세분화는 프로그램의 효율적인 실행을 위한 필수적인 구조적 접근 방식이다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글