기본 개념

- 메모리는 한 칸당 1byte의 크기를 가진다. 32비트 운영체제(x86)은 2^32의 메모리 주소를 가질 수 있고 이는 4GB에 해당한다. 그래서 32비트 운영체제는 최대 4GB까지 밖에 메모리를 설치하지 못하는 것이다. 64비트 운영체제의 경우에는 훨씬 큰 용량의 메모리도 설치할 수 있다. 그리고 64비트 운영체제의 메모리 주소를 나타내기 위해서는 8byte(64비트) 크기가 필요하다.
- 32비트 프로세서의 범용 레지스터의 크기는 32비트 즉 4바이트이고, 64비트 프로세서의 범용 레지스터의 크기는 64비트, 즉 8바이트이다. 즉 64비트 프로세서의 경우에는 2^64의 메모리 주소에 접근할 수 있게 되는 것이고 4GB보다 훨씬 큰 램을 적용할 수 있는 것이다.
메모리 구조

[Text(code)]
텍스트 영역은 아주 쉽게 말하면 코드를 실행하기 위해 저장되어있는 영역이다. 흔히 코드 영역이라고도 하는데, 프로그램을 실행시키기 위해 구성되는 것들이 저장되는 영역. 제어문, 함수, 상수들이 이 영역에 저장된다.
[Data]
데이터 영역은 우리가 작성한 코드에서 전역변수, 정적변수 등이 저장되는 공간이다. 이들의 특징을 보면 보통 메인(main)함수 전(프로그램 실행 전)에 선언되어 프로그램이 끝날 때 까지 메모리에 남아있는 변수들이라는 특징이 있다.
[Heap]
힙 영역은 쉽게 말해서 '사용자에 의해 관리되는 영역'이다. 흔히 동적으로 할당 할 변수들이 여기에 저장된다고 보시면 된다. 또한 Java나 C++에서 new 연산자로 생성하는 경우 또는 class, 참조 변수들도 Heap영역에 차지하게 된다. 다만, 이는 언어마다 조금씩 상이하니 일단은 '동적 할당 영역'이라고 알아두시면 된다. 그리고 Heap 영역은 대개 '낮은 주소에서 높은 주소로 할당(적재)된다.
[Stack]
스택 영역은 함수를 호출 할 때 지역변수, 매개변수들이 저장되는 공간이다. 메인(main) 함수안에서의 변수들도 당연 이에 포함된다. 그리고 함수가 종료되면 해당 함수에 할당된 변수들을 메모리에서 해제시킨다.
stack overflow
- 재귀 함수 등, 함수가 여러번 호출 되어서 지역변수, 매개변수가 할당된 stack 영역에 많이 쌓이게 되면 발생하는 overflow다.
heap overflow
- 힙 영역에서 할당된 영역을 넘어갈 때 발생하는 overflow다. 흔히 매우 큰 데이터를 할당할 때 발생하는 overflow다.
참조: https://st-lab.tistory.com/198
기본 개념
- 메모리는 한 칸당 1byte의 크기를 가진다. 32비트 운영체제(x86)은 2^32의 메모리 주소를 가질 수 있고 이는 4GB에 해당한다. 그래서 32비트 운영체제는 최대 4GB까지 밖에 메모리를 설치하지 못하는 것이다. 64비트 운영체제의 경우에는 훨씬 큰 용량의 메모리도 설치할 수 있다. 그리고 64비트 운영체제의 메모리 주소를 나타내기 위해서는 8byte(64비트) 크기가 필요하다.
- 32비트 프로세서의 범용 레지스터의 크기는 32비트 즉 4바이트이고, 64비트 프로세서의 범용 레지스터의 크기는 64비트, 즉 8바이트이다. 즉 64비트 프로세서의 경우에는 2^64의 메모리 주소에 접근할 수 있게 되는 것이고 4GB보다 훨씬 큰 램을 적용할 수 있는 것이다.
메모리 구조
[Text(code)](
텍스트 영역은 아주 쉽게 말하면 코드를 실행하기 위해 저장되어있는 영역이다. 흔히 코드 영역이라고도 하는데, 프로그램을 실행시키기 위해 구성되는 것들이 저장되는 영역. 제어문, 함수, 상수들이 이 영역에 저장된다.
[Data]
데이터 영역은 우리가 작성한 코드에서 전역변수, 정적변수 등이 저장되는 공간이다. 이들의 특징을 보면 보통 메인(main)함수 전(프로그램 실행 전)에 선언되어 프로그램이 끝날 때 까지 메모리에 남아있는 변수들이라는 특징이 있다.
[Heap]
힙 영역은 쉽게 말해서 '사용자에 의해 관리되는 영역'이다. 흔히 동적으로 할당 할 변수들이 여기에 저장된다고 보시면 된다. 또한 Java나 C++에서 new 연산자로 생성하는 경우 또는 class, 참조 변수들도 Heap영역에 차지하게 된다. 다만, 이는 언어마다 조금씩 상이하니 일단은 '동적 할당 영역'이라고 알아두시면 된다. 그리고 Heap 영역은 대개 '낮은 주소에서 높은 주소로 할당(적재)된다.
[Stack]
스택 영역은 함수를 호출 할 때 지역변수, 매개변수들이 저장되는 공간이다. 메인(main) 함수안에서의 변수들도 당연 이에 포함된다. 그리고 함수가 종료되면 해당 함수에 할당된 변수들을 메모리에서 해제시킨다.
stack overflow
- 재귀 함수 등, 함수가 여러번 호출 되어서 지역변수, 매개변수가 할당된 stack 영역에 많이 쌓이게 되면 발생하는 overflow다.
heap overflow
- 힙 영역에서 할당된 영역을 넘어갈 때 발생하는 overflow다. 흔히 매우 큰 데이터를 할당할 때 발생하는 overflow다.
'cs > computer architecture' 카테고리의 다른 글
| 메모리 계층 구조 (0) | 2023.04.15 |
|---|---|
| 파이프라이닝 (0) | 2023.04.15 |
| RISC, CISC (0) | 2023.04.15 |
| 고정 소수점 & 부동 소수점(fixed point & floating point) (0) | 2023.04.15 |
| 컴퓨터의 구성(버스) (0) | 2023.04.14 |