시스템 메모리 구조 조사 및 설명
프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리구조를 할당해준다.
(할당되는 메모리 공간은 크게 스택, 힙, 데이터, 코드 영역으로 나뉘어 진다.)
1. 먼저 데이터 영역은 전역 변수, 정적변수, 배열, 구조체 등이 할당되는 영역이라고 말할 수 있다.
이때 데이터 영역은 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야
메모리에서 소멸이 된다. 간단한 예제를 이용해 설명하자면,
#include<stdio.h>
int data = 5;
int data1 = 6;
int main(){
. . .
return 0;
}
이렇게 코드를 짠다면 data와 data1은 데이터 영역에 저장이 된다.
참고로 초기화되지 않은 데이터는 용량을 차지하지 않기위해 BBS에 저장이 된다. 실제로 BSS 영역에는 어느 정도의 공간 크기를 저장할 것이라는 정보를 저장한다.
2. 코드(code)영역은 그냥 간단하게 이름 그대로 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일의 메모리다.(프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역)
3. 힙(heap)영역은 필요에 의해 동적으로 메모리를 할당하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며, 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. *(이 영역에 데이터를 저장 하기 위해서 C는 malloc()을 사용한다.)
또 동적할당을 사용할 때 쓰는 함수는 calloc()과 realloc()이 있는데,
calloc함수는 malloc함수와 같은 기능을 가지고 있지만, 다만 형태가 조금 다를 뿐이다.
**(둘의 차이점){
malloc은 할당된 공간의 값을은 바꾸지 않는다.
calloc은 할당된 공간의 값을 모두 0으로 바꾼다.
배열을 할당하고 모두 0으로 초기화할 필요가 있을경우에는 calloc을 쓰면 편하다.}
ex) int *arr_1;
//arr_1 = (int*)malloc(sizeof(int)*5); 배열의 크기만큼 할당하기위해 5를 곱함
arr_1=(int*)calloc(5, sizeof(int)); //sizeof(int)크기의 변수를 5개 저장할수 있는 공간 할당
realloc(arr_1, sizeof(int)*10); //arr_1의 메모리를 40바이트로 재 할당
4. 스택영역은 프로그램이 자동으로 사용하는 임시 메모리 영역으로 지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다. 함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환 된다.
스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어, 런타임 시에 스택 사이즈를 바꿀 수는 없다.
- 명령 실행시 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정 한다.
'IT전공관련' 카테고리의 다른 글
c언어 메모리 구조(코드) (0) | 2017.07.17 |
---|---|
x86 CPU 레지스터 조사 (1) | 2017.07.17 |
함수 프롤로그, 에필로그, 스택 프레임 조사 (0) | 2017.07.17 |
세계전략 포럼 (0) | 2017.07.03 |
Layer 7 개인 프로젝트 보고서 (0) | 2017.05.21 |