Stack Manipulations 스택연산
- 스택 메모리의 사용법은 다 다르다. → x86 64bit 기준
- 함수 호출, 함수 안에서 변수는 스택을 이용한다.
- Automatic variables : declared inside a function
- 스택 메모리는 암묵적으로(자동적으로) 할당된다.
스택의 특징
- 프로세스를 만들 때 가장 높은 주소에 커널이 존재, 바로 밑에 스택
- 메모리에서 높은 주소에서 낮은 주소로 크기가 커진다.
- LIFO(Last-In, First-Out) 구조입니다.
- Base : 주소가 가장 높은 부분
- Top : 주소가 가장 낮은 부분
- 스택 연산:
- push: 스택 맨 위에 항목을 추가합니다.
- pop: 스택 맨 위의 항목을 제거합니다.
- 스택에 저장된 것을 레지스터로 불러들일 때 사용
Stack Operations
- CPU register 가 top, base 를 가르킴
- 스택의 한칸은 32bit


- double d = 2.0;
- 64bit로 정렬해주기 위해 중간에 padding byte 추가
이 지역변수들이 얼마나 떨어져있는 가는 컴파일러가 안다.
컴파일러가 소스코드를 어셈블리 코드로 변환하는 과정에서 함수안에서 몇개의 지역변수를 사용하는 지를 보고 스택의 크기를 결정한다.
함수 내에서 지역변수가 사용될 때마다 얼마나 떨어져있는 지 보고 어셈블리 코드로 만든다.
컴파일러가 스택의 top 을 조정

두 변수가 pop 되었다. →CPU 레지스터로 이동되었다.
스택안에 데이터를 지우는 것이라 stack 의 top 만 조절해준다.
Variable Declarations
- 컴파일러에게 데이터를 위한 스택의 공간을 요청