포인터 변수 = 스택
포인터 변수 값으로 저장된 메모리 = 힙
프로그램이 실행될 때 생기는 메모리 구성(Layout)
https://gabrieletolomei.wordpress.com/miscellanea/operating-systems/in-memory-layout/
프로그램은 코드로 이루어진 덩어리이며 이를 처리하기 위해서는 다양한 종류의 데이터가 필요하다.
- 코드 영역 ( text, Code segment ) : 코드가 탑재된다. 읽기 전용
- 데이터 영역 ( data ) : 글로벌과 static 변수가 탑재. 읽기 전용 영역과 읽고 쓰는 영역으로 구분되지만 크기는 변하지 않는다.
- 전역 데이터 영역 ( bss ) : 초기화 되지 않은 static 변수가 저장되는 공간. 읽고 쓰기 가능.
- 힙 : 크기가 변함. data, bss 영역 위쪽에 위치하고 공간이 늘어날 수록 메모리 주소 값이 커짐.
- 스택 : 크기가 변함. LIFO(Last in First out 마지막에 들어온 요소가 가장 먼저 나감) 스트럭쳐로 동작. 일반적으로 메모리 가장 뒤에 위치해 있으며 공간이 늘어날수록 메모리 주소 값이 작아짐.
프로세스는 4GB 메모리 영역을 할당받고, 쓰레드별로 스택을 할당한다. 보통 1MB.
https://docs.microsoft.com/en-us/windows/desktop/procthread/thread-stack-size
스택과 힙의 차이점