C언어 - 메모리 레이아웃 훑어보기

2020. 11. 12. 18:45개인공부/C언어

 

function pointer는 함수 자체의 주소 함수 자체에도 메모리에 저장되어있다.

 

함수의 주소도 가져올수 있다.

 

프로그램 코드 자체도 메모리에 올라와야 하고

 

한번 메모리에 올라오면 프로그램이 끝날때까지 올라와있어야한다.

 

 

전역변수는 빨간 박스 안에 들어가있고 프로그램이 끝날때까지 계속 메모리에 머물러 있다.

 

 

 

어떤 프로그램이 어떤 메모리를 쓰고 있다면 다른곳에서 메모리를 쓰지 못하게 막는다. 

하지만 프로그램이 쉬고있는 경우 다른 프로그램이 쓸수 있도록 내어줄수있어야 한다.(효율성)

 

초보입장에선 자신이 쓸 메모리를 항상 쓸수 있게 모든 변수를 전역변수로 선언해버리는것

 

 

 

 

지역변수는 스택이라는 다른 메모리에 저장된다.

지역변수가 쓰일때만 쓰이고, 쓰이지 않을땐 스택에서 빠진다.

 

스택은 늘어났다가 불필요하면 줄어들어 효율적으로 사용할수있는 장점이 있다.

 

메인함수의 특성상 메인함수의 지역변수는 메모리에 계속 머물러있게 된다.

 

 

 

 

그래서 큰 메모리를 쓸땐 함수에 넣어서 함수가 쓰일때만 큰 메모리가 쓰이고 함수가 종료될때 큰 메모리가 

빠질수 있도록 설계한다.

 

 

메모리가 얼마나 필요할지 알수없을때( 현대는 대부분 그렇다) 

컴파일할때 메모리 사이즈를 미리 알수없기 때문에 heap 영역을 사용한다. (stack은 컴파일할때 메모리를 얼마나 쓸지 알고 쓰는것 )

 

운영체제 기술은 가상주소공간으로 스택과 힙이 충돌하지 않게 한다.

 

운영체제를 통해서 메모리를 할당하고 반납하기 때문에 느려진다.

 

프로그래머가 직접 항상 메모리를 반납해야한다. (  free(arr)  )

 

 

출처 : 홍정모의 따라배우는 C언어