You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
프로세스는 운영체제로 부터 자원을 할당받는 작업의 단위이고
운영체제로 부터 할당받은 자원은 독립된 Heap, Data, Stack, Code 로 구성되어 있다고 학습했습니다.
오늘은 프로세스 메모리 영역에 대해서 좀 더 자세히 알아보겠습니다.
Code(TEXT)
우리가 작성한 소스코드가 들어가는 부분으로 실행할 프로그램의 코드가 저장되는 영역
함수, 제어문, 상수등이 여기에 지정된다
컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없도록 Read-Only
Data
프로그램의 전역변수와 정적변수가 저장되는 영역 -> 프로그램이 실행되는 동안 항상 접근 가능한 변수가 저장
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다
실행중에도 전역변수가 변경될 수 있으니 Read-Write
초기화된 데이터는 Data 영역에 저장되고, 초기화 되지않은 데이터는 BSS 영역에 저장된다.
Stack
함수의 호출관 관계되는 지역변수와 매개변수가 저장되는 영역
Stack은 함수의 호출과 함께 할당되며, 함수의 호출이 종료되면 소멸한다
Heap 영역에 생성된 Object 타입의 데이터 참조값이 할당된다. (인스터스 생성시 주소값이 Stack에 저장된다)
메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.
컴파일 타임에 크기가 결정되기 때문에 무한히 할당할 수 없다 -> Stack Overflow
Heap
런타임에 크기가 결정되는 메모리 영역이다.
사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다
참조형의 데이터의 값이 저장된다. (인스턴스의 실제 데이터가 저장되는 공간)
Heap은 메모리의 낮은주소 부터 높은 주소 방향으로 할당된다.
HEAP, STACK 영역은 같은 공간을 공유하고 있다.
따라서 어느 한쪽의 영역이 상대공간을 침범하는 일이 생길 수 있고 이를 Heap Overflow, Stack Overflow 라고 한다.
기존의 지식과 조금 엮어서 풀어보겠습니다.
1 ) 코딩테스트 문제를 풀 때, 겪던 메모리 초과
보통 백준에서 알고리즘 문제를 풀 다 보면 심심찮게 메모리 초과를 경험할 수 있습니다. 물론 실제로 문제에서 요구하는 메모리 보다 더 많은 메모리를 사용하는 경우일 수도 있지만 대부분 지역변수로 할당된 메모리를 전역변수로 수정하면 위와 같은 문제를 피할 수 있었습니다. 이는 보통 OS에서 성능상의 이유로 Stack 영역에 메모리 제한을 걸어두기 때문입니다. (윈도우: 1MB, 리눅스: 8MB) 따라서 전역변수로 선언한 데이터들은 Data 영역에 저장되기 때문에 위와 같은 문제를 피할 수 있었습니다.
2) ARC
Swift에서는 클래스를 통해서 인스턴스를 생성할 경우
실제 인스턴스 메모리는 Heap 영역
메모리를 가리키는 주소값은 Stack 영역
에 저장되고 RC가 0이되는 순간에 자동으로 Heap 영역의 메모리를 해제하는 ARC 라는 기능이 있습니다.
C언어의 경우, Heap 영역 메모리를 사용하기 위해서는 Calloc, Malloc과 같은 함수를 통해서 사용자가 지정한 크기 만큼을 Heap 영역에 할당하고 Stack 영역에는 마찬가지로 주소값만을 가지고 있게 됩니다.
하지만 C에서는 메모리 누수를 피하기 위해서는 Swift와 달리 Heap영역 메모리 해제를 위해서 free 해주는 과정이 필요합니다.
The text was updated successfully, but these errors were encountered:
프로세스는
운영체제로 부터 자원을 할당받는 작업의 단위
이고운영체제로 부터 할당받은 자원은 독립된
Heap, Data, Stack, Code
로 구성되어 있다고 학습했습니다.오늘은 프로세스 메모리 영역에 대해서 좀 더 자세히 알아보겠습니다.
Code(TEXT)
Read-Only
Data
전역변수와 정적변수
가 저장되는 영역 -> 프로그램이 실행되는 동안 항상 접근 가능한 변수가 저장Read-Write
Stack
Stack Overflow
Heap
HEAP, STACK 영역은 같은 공간을 공유하고 있다.
따라서 어느 한쪽의 영역이 상대공간을 침범하는 일이 생길 수 있고 이를
Heap Overflow, Stack Overflow
라고 한다.기존의 지식과 조금 엮어서 풀어보겠습니다.
1 ) 코딩테스트 문제를 풀 때, 겪던 메모리 초과
보통 백준에서 알고리즘 문제를 풀 다 보면 심심찮게 메모리 초과를 경험할 수 있습니다. 물론 실제로 문제에서 요구하는 메모리 보다 더 많은 메모리를 사용하는 경우일 수도 있지만 대부분 지역변수로 할당된 메모리를 전역변수로 수정하면 위와 같은 문제를 피할 수 있었습니다.
이는 보통 OS에서 성능상의 이유로 Stack 영역에 메모리 제한을 걸어두기 때문입니다. (윈도우: 1MB, 리눅스: 8MB)
따라서 전역변수로 선언한 데이터들은 Data 영역에 저장되기 때문에 위와 같은 문제를 피할 수 있었습니다.
2) ARC
Swift에서는 클래스를 통해서 인스턴스를 생성할 경우
Heap 영역
Stack 영역
에 저장되고 RC가 0이되는 순간에 자동으로 Heap 영역의 메모리를 해제하는 ARC 라는 기능이 있습니다.
C언어의 경우, Heap 영역 메모리를 사용하기 위해서는
Calloc, Malloc
과 같은 함수를 통해서 사용자가 지정한 크기 만큼을Heap 영역
에 할당하고 Stack 영역에는 마찬가지로 주소값만을 가지고 있게 됩니다.하지만 C에서는 메모리 누수를 피하기 위해서는 Swift와 달리
Heap영역
메모리 해제를 위해서 free 해주는 과정이 필요합니다.The text was updated successfully, but these errors were encountered: