기본적인 컴퓨터 구조 내부 설명을 들을 때 주로 스택과 힙에 대해 많이 듣게 된다 그리고 실제로 많은 어플리케이션이나 서버에서 생기는 문제들이 힙영역의 처리가 제대로 되지 않아 생기는 문제들이라고 한다. (자바나 C#같은 고급언어들도 마찬가지이다. 메모리를 알자)
지금은 간단히 적고 나중에 추가 업로드
메모리 구조와 운영체제
- 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드 되어야 함
- 프로그램에서 사용되는 변수들을 저장할 때도 메모리를 사용
- 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공
프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지로 요약
1. 코드 영역
2. 데이터 영역
3. 스택 영역
5. 힙 영역
코드영역
- 메모리의 코드영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부른다
CPU는 코드 영역에 저장된 명령어 하나씩 가져가서 처리하게 된다
상수는 여기에 포함되며 컴파일된 기계어가 저장되어 프로그램이 끝날 때 소멸
데이터 영역
- 메모리의 데이터 영역은 프로그램의 전역변수와 정적(static)변수가 저장되는 영역
데이터 영역은 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸
스택 영역
- 메모리의 스택 영역은 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역
스택영역은 함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸
이렇게 스택영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 함
컴파일 시에 크기가 결정된다
힙 영역
- 사용자가 직접 관리할 수 있는 그리고 C나 C++에서는 직접 생성과 소멸을 주관하고 C# 이나 Java에서는 생성관 주관한다
힙 영역은 메모리 공간이 동적으로 할당되고 해제되고 메모리의 낮은 주소에서 높은 주소의 방향으올 할당된다
런타임시에 크기가 결정된다.
출처: http://tcpschool.com/c/c_memory_structure
https://blog.perfectacle.com/2017/02/09/c-ref-004/