Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • iOS
    • visionOS
    • Backend
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • if let
  • 모듈화
  • MVC
  • swift
  • Animation
  • 소프트웨어공학
  • Python
  • AVAudioSession
  • SwiftUI
  • 알고리즘
  • Concurrency
  • alamofire
  • jekyll
  • CS
  • 소프트웨어 공학
  • 백준
  • 소프트웨어 테스트
  • constraint
  • ios
  • ImageResource
  • 부스트캠프
  • 오블완
  • guard
  • image
  • AutoLayout
  • Git
  • boj
  • Swift5.7
  • Optional
  • 티스토리챌린지

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
메모리의 구조
부스트캠프

메모리의 구조

2024. 7. 18. 14:04

메모리의 구조

memory

Stack

  • 스택은 함수에 대한 정보를 저장한다.
    • 지역 변수, 매개 변수, 리턴 값, 호출 함수 정보 등
  • 함수 호출 시 스택에 해당 함수에 해당하는 공간 (Stack Frame)이 생기고, 함수 실행이 끝나면 사라진다.
  • 컴파일 단계에서 생성과 해제를 알 수 있는 값 타입이 저장된다.
    • 컴파일 타임에 크기가 결정된다.
  • 참조 타입 중에서도 크기가 고정되어 있거나, 언제 지워야할 지 컴파일러가 미리 예측 가능한 경우 가급적 stack을 사용해 성능을 향상시킨다.
  • Heap 에 비해 접근 속도가 빠르다.

힙 영역과 스택 영역이 다른 방향을 가지는 이유
스택은 항상 커널의 반대 방향으로 자라기 때문에 커널을 만나지 않는다.
스택이 아무리 커져도 접근 불가 영역인 커널을 건드리지 않는다.
힙 영역은 스택과 달리 새로운 데이터가 추가될수록 더 큰 메모리 주소를 할당받는다.
스택 영역과 힙 영역이 공유 라이브러리 영역을 가운데 두고 서로 마주보는 형태를 가지기 때문에 메모리 공간을 효율적으로 활용할 수 있다.

Memory Mapping Segment

  • 공유 라이브러리 영역이라고도 불리는 곳으로, 동적 라이브러리와 공유 라이브러리의 코드가 적재되는 곳입니다.
  • 공유 라이브러리는 응용 프로그램이 시작되는 순간에 메모리에 적재됩니다.
  • 동적 라이브러리는 응용 프로그램이 해당 라이브러리의 내용을 필요로 할 때 적재하게 됩니다.
  • 런타임에 링크/로드 됩니다.

Heap

  • 힙 영역은 프로그래머가 동적으로 할당한 데이터들이 저장되는 공간이다.
    • Swift에서는 직접 할당하지 않는다.
    • 해제 또한 참조되지 않는 메모리를 ARC가 해제한다.
  • 참조 타입의 값이 저장되는 공간이다.
    • ex) Class, Closure
  • 사용 후 메모리 해제를 하지 않으면 메모리 누수 (Memory Leak)이 발생한다.
  • 유일하게 크기가 런타임에 결정된다.
  • Stack에 비해 접근 속도가 느리다.

BSS Segment

BSS segment는 초기화 되지 않은 전역 변수 또는 Static 변수를 저장한다.

segment가 BSS / Data로 분리되는 이유
초기화된 데이터는 초기화되지 않은 변수와 다르게, 해당 값을 프로그램에 저장하고 있어야 한다.
BSS 영역은 초기화되지 않은 데이터가 저장되기 때문에 프로그램이 실행될 때 영역만 차지하고 그 값을 프로그램에 저장하고 있을 필요가 없다. 
BSS 영역 변수들이 많아져도 프로그램의 실행 코드 사이즈를 늘리지 않는다.

 그렇다면 BSS에 있는 전역 변수에 값을 넣어주면 Data로 이동하나..?

Data Segment

  • data segment는 초기화된 전역 변수 또는 Static 변수를 저장한다.
  • 프로그램 시작 시 할당되고, 종료 시 해제된다.

Code(Text) Segment

  • code segment은 프로그램을 실행하기 위한 코드를 기계어 형태로 저장한다.
    ex) if{...} -> ASM -> 기계어 -> code 영역에 저장
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가 처리한다.
  • 컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장된다.

 

 

 

저작자표시 (새창열림)

'부스트캠프' 카테고리의 다른 글

Static Dispatch & Dynamic Dispatch  (0) 2024.07.22
네이버 부스트캠프 웹・모바일 9기 챌린지 과정 1주차 회고  (1) 2024.07.19
토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)  (0) 2024.07.17
M1 맥에 우분투 가상환경 설치하고 swift 설치하기!  (0) 2024.07.16
Git 학습하기  (0) 2024.07.15
    '부스트캠프' 카테고리의 다른 글
    • Static Dispatch & Dynamic Dispatch
    • 네이버 부스트캠프 웹・모바일 9기 챌린지 과정 1주차 회고
    • 토크나이저, 렉서, 파서 (Tokenizer, Lexer, Parser)
    • M1 맥에 우분투 가상환경 설치하고 swift 설치하기!
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바