article thumbnail image
Published 2022. 4. 25. 21:21

메모리는 컴퓨터부품중 램이라는녀석이다 주기억장치라고 부르며 아래는 메모리가 돌아가는 작동순서이다.

1.사용자가 실행요청을하면

2.HDD에서 정보를 읽어 메모리에 보낸다

3.램에서 실행시킨 코드들을 CPU가 실행시키고

4.FREE STORE 영역을 사용하여 STACK 영역으로 간다

5.스택메모리가 할당되면 FREEStoer영역을 사용한다.

1.코드영역

여기에는 함수,제어문,코드등이 들어감 text영역이라고도 부름

2.데이터 영역

전역변수와 static변수가 할당되는 영역
프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸되는 영역

import Foundation

var a: Int = 10;	// 데이터 영역에 할당
var b: Int = 20;	// 데이터 영역에 할당

func dataFunc()  -> Bool {
    return true
}

3.스택영역

프로그램이 자동으로 사용하는 임시 메모리 영역이다.
함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역이고,
함수 호출이 완료되면 사라집니다.

import Foundation

var a: Int = 10;	// 데이터 영역에 할당
var b: Int = 20;	// 데이터 영역에 할당

func dataFunc() -> Bool {

  someFunc1(3)
  someFunc2(5)

  return true
}

func someFunc1(c: Int) {
  int d = 30;	
  // 매개변수 c와 지역변수 d가 스택영역에 할당
}

void someFunc2(e: Int) {
  int f = 40;	
  // 매개변수 e와 지역변수 f가 스택영역에 할당
}

4.힙영역

프로그래머가 할당/해제하는 메모리 공간이다.
Java에서는 가비지 컬렉터가 자동으로 해제합니다.
이 공간에 메모리 할당하는 것을 동적 할당(Dynamic Memory Allocation)이라고도 부른다.

예를 들어 클래스, 클로저가 이 부분에 해당 된다.
런타임 시에 크기가 결정된다.

위의 HEAP과 STACK영역은 사실 같은 공간을 공유한다. HEAP이 메모리 위쪽 주소부터 할당되면 STACK은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 HEAP OVERFLOW, STACK OVERFLOW라고 칭합니다.

Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클수록 Stack 영역이 작아집니다.

 

https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/ 출처임

 

'컴퓨터 공학' 카테고리의 다른 글

캐시가 무엇이냐?  (0) 2022.04.25
가비지 컬렉션이란?  (0) 2022.04.25
[운영체제]운영체제란 무엇인가?  (0) 2022.04.25
그래픽  (0) 2022.04.25
문자열 하나가 몇 바이트인가에 대해서  (0) 2022.04.25
복사했습니다!