Stack

top의 최초값은 -1이고 push하기전에 +1해서 0부터 item을 삽입한다.

pop하기 전에는 top의 값에서 -1한다.

pop을 한다고 해서 item을 없애는 것이 아니라 top의 값을 변경해서 관리하고 있는 값이 아니라고 표시하는것.

void StackType::Push(ItemType newItem) {
    if (IsFull())
        throw FullStack() : top++;
    items[top] = newItem;
}
void StackType::Pop() {
    if (IsEmpty())
        throw EmptyStack();
    top--;
}
ItemType StackType::Top() {
    if (IsEmpty())
        throw EmptyStack();
    return items[top];
}

Acutual Parameter vs Formal Parameter

acutal parameter는 실제로 함수를 호출할 때 전달하는 값이고

함수에서 형식상 있고 아직 값을 알수 없는 인자가 formal parameter이다.

template의 actual parameter는 data type이다. 컴파일러가 data type을 받아서 컴파일을 수행한다.

함수의 parameter도 local variable이다. 초기화를 하는지 안하는지의 차이밖에 없다.

& = address of operator

포인터도 주소값을 저장할 뿐인 local variable이다. 포인터의 type이 존재하는 이유는 그 주소에 존재하는 데이터의 타입을 알려주기 위한 것이다.

*dereferencing operator = ptr 그 주소에 저장된 값을 가져온다.

**두개 붙으면 dereferencing을 두번 수행한다.

Memory Allocation

런타임에 함수가 실행되면 스택에 메모리 영역 할당이 일어난다.

automatic data는 함수 내에서 사용하다가 함수 return하면 자동으로 destroy되는 데이터. 지역변수가 해당한다. automatic data의 주소는 스택포인터로부터 몇칸 떨어져있는지로 지정되며 런타임에 덧셈을 통해서 실제 주소를 계산하기 때문에 변수 엑세스 속도가 약간 더 느리다.

static은 프로그램 시작하면 할당되고 종료할때까지 가지고 있기 때문에 메모리 낭비가 심할 수 있다.