스택과 힙
스택과 힙을 창고로써 비유하자면
###스택(stack)은
원시타입만 올 수 있으며 크기와 순서가 일정하게 쌓인다.
창고로 치면 문이 하나밖에 없다.
물건이 들어갈 수 있는 문과 나가는 문이 하나인데 문이 존재하려면 물건의 크기를 알아야한다.
크기를 알고 시작위치를 알면 위치도 알 수 있기 때문에 메모리에 넣고 찾을 수 있다.
###힙(heap)
힙은 크기를 알 수 없고 따라서 어디에 물건이 위치해 있는지 어디에 넣어야하는지 알 수 없다.
따라서 물건을 빼내기 위해서는 주소값을 들고 있어야 하고 해당 주소값은 물건의 크기와 위치를 알고 있어서 (<- 추가적 공부가 필요함.) 물건을 확인하고 찾을 수 있다.
주소값을 들고 있는 정보는 스택에 쌓인다
정리하면, 힙은 값을 가지고 있고, 스택은 값에 대한 참조를 들고 있다(storage와 메모리의 차이?)
프로그램에서 함수가 실행되면 예를 들면 a ()( { b() { c() } } 가 프로그램이라고 해보자.
순서대로 a, b, c로 스택에 담아두면 종료를 하면 콜스택에 담은 b의 함수를 찾아가 실행한다.
B 에서 담긴 c함수가 콜스택에 쌓이게 되고 b가 종료되면 c함수로 찾아가 실행한다.
- C에서는 const에 * const A는 주소값을 , const * A는 객체 자체를 상수로 받도록 처리해줄수 있다.