프로세스의 메모리?
Code 영역 : 프로그램의 코드
Data 영역 : 전역적으로 초기화된 데이터
BSS 영역 : 전역적으로 초기화되지 않은 데이터
Heap 영역 : 런타임에 크기가 결정, 동적으로 할당되는 데이터
Stack 영역 : 컴파일 타임에 크기가 결정, 지역 변수, 매개 변수, 반환 주소 값
컴파일 타임과 런타임은 무엇일까?
컴파일 타임 : 소스 코드를 실행 가능한 코드로 변환하는 시간
런타임 : 실행 가능한 코드를 실행하는 시간
스레드의 메모리?
하나의 프로세스에 한 개 이상의 스레드가 존재할 수 있음
스레드는 Stack 영역만 독자적으로 갖고, 나머지는 다른 스레드들과 공유하고 있음
스레드 세이프란, 다중의 스레드가 공유하는 리소스에 접근해도 실행 결과가 옳음을 의미
스택과 힙 영역은 어떻게 관리될까?
스택 영역은 위에서부터 메모리를 할당
힙 영역은 아래에서부터 메모리를 할당
계속된 할당으로 한 영역에서 다른 영역을 침범하면 오버플로우 발생