Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로세스
- 코딩테스트
- BFS
- dfs
- 독학
- 장치컨트롤러
- 컴퓨터 구조
- 멀티스레드
- 혼자 공부하는
- DirectX
- 한빛미디어
- 혼자공부하는
- 지역변수
- 프로그래머스
- Transform
- 컴퓨터구조
- 138477
- 입출력장치
- 보조기억장치
- 그래프
- 인터럽트
- C++
- 풀이
- 운영체제
- 렌더링 파이프라인
- 스레드
- CPU 스케줄링
- 131701
- static
- DDR SDRAM
Archives
- Today
- Total
빼미의 개발일기
[컴퓨터 구조] - 메모리 구조 본문
메모리 구조
메모리는 낮은 주소값에서 높은 구조값 순으로 크게 4가지의 영역으로 나뉜다.
이게 일반적으로 많이 봤던 메모리 구조이지만, 좀더 자세하게 다루면 이런 구조이다.
- Text(Code) : 흔히 코드영역(Code Segment)라고 부르고, 코드를 실행하기 위한 영역이다.
- 프로그램을 실행시키기 위해 구성되는 명령문을 저장하는 공간으로, 제어문, 함수, 상수 등이 이 영역에 저장된다.
- Data : 전역변수, 정적변수 등이 저장되는 공간, 메인 함수 전에 선언되어 프로그램이 종료될 때까지 메모리에 남아있는다. 데이터 영역은 선언과 함께 초기값을 설정해주면 Data 영역에 저장이 되고, 초기값을 설정하지 않는다면 Data 영역의 일부인 BSS 영역(Block Started by Symbol)에 저장되는데 이는 초기화되지 않아도 메모리 공간은 미리 확보를 해놔야 하기 때문이다.
int Data = 100; // Data 영역에 저장
int BSS; // BSS 영역에 저장
int main()
{
BSS = 200; // BSS 영역의 공간에 값을 저장
return 0;
}
- Heap : 사용자가 관리 할 수 있는 메모리 영역, 동적 할당 할 변수가 저장되는 공간이다. Heap영역은 낮은 주소에서 높은 주소로 데이터가 적재된다.
- Stack : 지역 변수, 매개변수들이 저장되는 영역, 함수가 종료되면 해당 함수에 할당된 변수들을 메모리에서 해제한다.
- Stack 영역은 높은 주소에서 낮은 주소로 데이터가 적재된다.
- Kenral : 운영체제등 시스템을 통제할때 사용되어야 하는 최소한의 메모리 공간. 이 곳은 사용자가 함부로 접근 할수 없다.
Heap 과 Stack은 왜 이런 구조인가?
- 1차원적으로 서로 양 끝단부터 정리하여 최대한 많은 메모리 공간을 확보하기 위해서 이며, Heap과 Stack 영역은 각각 일정의 공간을 가지고 있다. 그 공간 이상을 초과하면 오버플로우(Overflow)가 발생하며, 힙이 많으면 힙 오버플로우(Heap Overflow), 스택이 많으면 스택 오버플로우(Stack Overflow) 라고 한다.
그럼 메모리 공간만 많이 확보하려고 저러는 걸까?
어차피 Heap과 Stack이 일정 공간은 확보하는데 저렇게 하는건 왤까? 과거에 메모리 구조는 스택도 힙 영역 다음에 위치해 낮은 주소에서 높은 주소로 값을 저장했었다. 하지만 메모리의 마지막 영역이 시스템을 통제하는 Kernal 영역인데, 스택 오버플로우를 강제로 발생시켜 Kernal영역에 접근 후 컴퓨터를 해킹하는 사례가 많이 일어났다. 때문에 이를 방지하기 위해 스택을 높은 주소에서 낮은 주소로 쌓는 것이다.
'프로그래밍 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터구조] - 8강. 추가 : C언어의 컴파일 과정 (0) | 2023.07.22 |
---|---|
[컴퓨터 구조] - 7강. 명령어의 구조와 주소 지정 방식 (0) | 2023.07.22 |
[컴퓨터 구조] - 6강. 소스코드와 명령어 (0) | 2023.05.12 |
[컴퓨터 구조] - 5강. 0과 1로 숫자를 표현하는 방법 (0) | 2023.05.11 |
[컴퓨터 구조] - 4강. 0과 1로 숫자를 표현하는 방법 (0) | 2023.05.08 |
Comments