text/common

변수 메모리 할당 (간단 정리)

hoonzii 2023. 7. 31. 10:25
반응형

메모리 할당

프로그램이 실행되어 메모리에 올라갈때는 해당 프로그램이 사용가능한 메모리 영역을 os로 부터 할당 받는다.

할당 받은 메모리는 크게 4부분으로 나뉜다.

  • 데이터 영역
  • 코드 영역
  • 스택 영역
  • 힙 영역

데이터 영역

상수 값, 정적 변수, 글로벌 변수 등이 할당, 선언된다. 프로그램의 실행과 함께 메모리위에 올라가고, 종료와 함께 메모리에서 해제된다. 그렇기 때문에 정적 변수에 메모리가 큰 값을 할당하는 걸 조심해야 한다.

 

코드 영역

프로그램의 코드(명령어)가 저장된 공간이다. 해당 명령어를 통해 프로그램의 실행이 제어 된다.

 

스택 영역

함수 실행시 해당 영역에 필요한 메모리가 할당된다. 함수 내 지역변수, 매개변수, 함수 리턴값 등이 메모리 위에 올라간다. 함수 종료시 해당 영역은 해제되며 재귀 함수 호출을 잘못해 함수를 무한히 호출할 경우, 해당 스택 영역에 메모리가 다 차서 스택 오버플로우 에러가 난다.

 

힙 영역

프로그램 실행중 동적으로 할당되는 변수값이 저장되는 공간이다. (ex.List에 값 추가) C,C++ 등에서는 이런 동적 메모리 할당과 메모리 해제를 개발자가 직접 해줬어야 했고, 하지 않으면 힙 영역 역시 메모리가 다 차서(누수라고 한다.) Out of Memory 에러가 난다. (예기치 못하게)

 

여러 프로그래밍 언어에서 변수 메모리 할당

JAVA

힙 영역의 메모리 관리는 Garbage Collector

Garbage collection 이 무엇인가요? 왜 쓰나요? 어떤 문제가 있을까요?

 

PYTHON

everything is object x = 10 이렇게 선언시 int Object인 10이 할당되고, x 변수는 해당 object 주소를 가리키는 형태

y = x 새로운 int Object 생성 안하고 생성된 int Object 주소를 y 변수가 가리키는 형태

 

힙 영역의 메모리 관리는 python memory manager python/C api를 이용,

python은 내부가 C로 구현되어 있기에 c의 메모리 할당, 해제 함수를 사용해 구현됨.

 

Object를 가리키는 변수가 없다면 manager에 의해 메모리 해제 Object 내부에 자신을 얼마나 가리키고 있는지 count하는 변수가 존재 해당 변수가 0이 되면 메모리 해제 작업 동작

 

JAVASCRIPT

JAVA GC와 같은 방식으로 동작

 

 

ref)

메모리 할당

https://42place.innovationacademy.kr/archives/8371

 

프로그래밍 언어에서 사용 되는 메모리에 대해

프로그램이 프로세스가 되어 메모리에 로드되면 크게 코드영역과 데이터 영역으로 나뉩니다. 여기서 코드영역이라는 것은 컴파일 된 명령어의 집합이 차지하는 공간으로 프로그램이 실행된다

42place.innovationacademy.kr

 

python 메모리 할당

https://woochan-autobiography.tistory.com/867

 

Python - 메모리 구조 및 메모리 할당 과정

목차 Everything is object in Python 파이썬의 메모리 구조 파이썬에서의 Heap 사용 파이썬에서의 메모리 할당 과정 Everything is object in Python x = 10 print(type(x)) >> C에서 x = 10 이렇게 변수를 할당하면, 메모리

woochan-autobiography.tistory.com

https://hongl.tistory.com/262

 

파이썬의 memory management

파이썬 또한 프로그래밍 언어이기 때문에 컴퓨터 메모리 (RAM) 상에 데이터를 저장하고 (write) 읽는 (read) 작업을 수행해야합니다. 파이썬 프로그램이 수행된다면 데이터를 저장할 메모리 공간을

hongl.tistory.com

 

javascript 메모리 할당

https://velog.io/@sejinkim/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%EC%84%A4%EB%AA%85

 

[번역] 자바스크립트의 메모리 관리 설명

JavaScript에서 변수, 함수, 객체 등이 어디에서 어떻게 저장되고 사용되는지, 그리고 더 이상 필요하지 않을 때 어떻게 수집되는지를 간략히 설명한 글입니다.

velog.io

 

반응형