카테고리 없음
[c언어] 메모리 교환, 스택, 힙
제이G
2023. 6. 19. 18:25
machine code: 0과 1로 컴파일된 코드가 들어감
globals: 전역 변수와 다른 정보들은 machine code 아래 공간에 들어감
heap: 메모리를 할당받을 수 있는 커다란 영역. malloc을 호출하면 메모리를 이 영역에서 가져옴.
동적으로 할당한 변수들이 저장
함수의 지역변수, 파라미터를 저장. 함수를 호출하면, 그 위에 있는 메모리를 사용하는 것. 함수가 호출 될 때, 지역 변수가 쌓이는 공간.
main을 호출하면, 메모리 맨 아래(스택)에 main 함수에 해당하는 스택 프레임이라는 공간이 주어진다. 이 공간은 지역변수와 파라미터를 저장하는 공간이다. 즉, main함수 안에 있는 변수, 파라미터는 해당 메모리 영역에 저장된다.
main함수가 swap 함수를 호출하면, 해당 함수를 위한 메모리 영역이 main위에 쌓인다. 마찬가지로, swap함수의 지역변수와 파라미터가 해당 메모리 영역에 저장된다.
swap 함수의 인자로 x, y값을 전달한 경우.
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
int main(void)
{
swap(a, b);
}
즉, 위와 같은 형태로 저장될 것이다.
swap 함수의 인자로 x, y의 주소값(포인터)를 전달한 경우.
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void)
{
swap(&a, &b);
}