지금까지 내용을 학습하면서 프로세스와 연관된 내용들이 많았는데 그렇다면 프로세스 구조가 어떻게 구성되어 있는지 알아보자.
일반적인 프로세스의 구성
예
Return Address: 0050h
a= 1
b= 2
heap
data
c= 0
def func(a, b):
print(a+b)
c = 0
c = func(1, 2)
print(c)
def func(a, b):
print(a + b)
c = 0
c = func(1, 2)
print(c) #005h
힙은 동적으로 생성되는 메모리 공간이다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *data; // 포인터 변수
data = (int *) malloc(sizeof(int));
*data = 1;
printf("%d\n", *data);
return 0;
}
heap을 이해하기 위해서 다음 코드를 살펴보자.
malloc
이라는 함수는 동적으로 메모리를 생성하는 함수이며 정수 타입의 사이즈를 메모리 공간에 할당한다.
int
에 포인터 변수를 만들어주면 malloc(할당)
의 리턴값은 동적으로 만든 메모리의 주소를 반환한다.
이렇게 반환된 변수를 data라는 변수에 할당해주면 동적 메모리에 접근할 수 있는 변수가 된다.
동적 메모리를 free(해제)
시키는 함수도 존재한다.
데이터 메모리 공간은 BSS와 DATA 두 가지의 공간으로 나뉜다.
int global_data1;
int global_data2 = 1;
int main()
{
int *data; // 지역변수는 stack에 저장
data = (int*) malloc(sizeof(int));
*data = 1;
printf("%d₩n", *data);
return 0;
}
BSS: 초기화 되지 않은 전역 변수
DATA: 초기값이 있는 전역 변수