
이미지 출처
메모리(Ram) = 실행중인 프로그램의 명령어와 데이터를 저장
CPU = 해당 메모리에 저장된 명령어를 읽어들이고 명령을 실행, 해석하는 부품
f == 함수 ,r == 결과, 정수 = 변수
메모리 실행과정 = {f([1]+[2]),100,120} => {f,100,120,r(220)}
순서는 메모리에 올려져있는걸 CPU가 읽고 다음 메모리에 기입하는 형태
- Q : 그렇다면 함수도 메모리에 저장 되는 것으로 보이는데 스텍영역으로 사용 후 회수가 되는걸까요?
- A : O(다만 함수 호출 자체는 메모리를 생성하진 않음 함수가 끝날때 매개변수와 지역변수 해제
- Q(1번 케이스가 stack영역일시) : Action같은 delegate 기반의 객체들을 필드로 선언두면 함수의 포인터를 저장하는 인스턴스로 알고있습니다.
제가 기억하기로는 참조형 == 힙영역, 값타입 == 스텍영역 으로 기억하고있는데 함수포인터는 실행 시 스텍영역을 할당받는건가요?
- A : 힙메모리에 할당이 되긴함
- 실행에 스텍영역을 받는다면 GC를 호출시마다 실행하진 않을 것 같고 참조형이니 저장은 힙, 실행은 스텍 이렇게 이해하면 될지요?
- A : O
- 또 제가 작업할때 구조때문에 함수 포인터를 자주 쓰는편인데 저장에 힙영역을 할당받는다면 사용 빈도를 줄이는게 좋을 까요?
- A : 구조우선, 메모리도 중요하나 협업 가능한 코드를 짜는것이 더 중요

- 코드영역
- readOnly, const와 컴파일된 코드들이 저장되는 공
- 데이터영역
- static이나 field같은 변수를 저장하는 공간
- 스텍 영역
- 지역변수,매개변수,struct
- 함수 실행 시 할당되는 지역,매개변수는 함수 종료와 함께 메모리 해제
- 힙 영역
- 이 공간에 메모리 할당하는것이 동적할당
- 참조형을 저장하는 공간(new키워드로 생성하는 객체)
- 만일 지역번수로 참조형을 사용한다면?
- 생성 자체는 힙영역에 할당(본체), 지역변수는 포인터를 가져온 스텍 메모리 영역, 없으면 그냥 GC수거
- Q : 그렇다면 지역변수에서도 사용이 끝난 힙 객체들은 null로 설정해두어야 하나요?