stack 5

[컴파일러 이론] 13. Memory Allocation

메모리의 구조를 다시 간단히 정리해보자. 메모리 안에 code와 data가 같이 저장되어있다.data의 stack부분을 자세히 보면 이전에 알아봤던 AR을 단위로 저장된다.stack과 code 사이에는 static data를 저장하는 공간도 있다.프로그램 동작 중에 동적으로 생성되는 것들은 heap에 저장된다. C, C++ 코딩 시에 메모리 free 등을 안해서 에러가 났던 경험이 한번씩 있을 것이다.java,python 같은 언어는 garbage collection이라는 기능이 있어 알아서 이런 부분을 처리해준다.이렇게 자동으로 메모리를 관리해주는 법을 알아보자.Object Reachability유저가 free를 명시적으로 하지 않았을 때, 언제부터 이게 정말로 필요하지 않을지 판단해야한다.아래 그림에..

CS/컴파일러 2026.01.06

[컴파일러 이론] 9. Code Generation - Stack Machine

아래처럼 간단한 코드는 어셈블리 코드로 바꾸기 쉬울 것이다.하지만 함수 호출등 코드가 복잡해지면 어려워진다.Stack Machine위의 어려움을 조금 해소해주기 위해 만들어진 방법이 stack machine이다.일단 모든 데이터가 스택에 저장되어있다고 가정하고 진행해보자.이 가정이 없는 경우에 대해서는 바로 이어서 다룰 것이다. stack machine은 n개의 피연산자를 스택에서 pop하고 이 값들을 이용해 operation(명령어)를 계산한다.그 이후 그 결과를 다시 스택에 push한다. 간단한 설명이지만 약간 추상적이므로 예시를 보고 확실히 이해를 해보자.아래 예시는 7+5를 계산하는 예시이다.2번의 load(pop), 1번의 store(push)로 계산할 수 있다.그러나 덧셈 한번에 3번의 메모리..

CS/컴파일러 2025.12.29

[컴파일러 이론] 8. Code Generation - Activation Record, stack, heap

이전 글에서도 몇 번 봤던 그림을 다시 보고 시작해보자.이전 글까지 총 7개의 글에 걸쳐 lexical → Syntax → Semantic 분석을 알아봤었다.이제는 Code Generation과정에 대해 알아보자. 컴파일러의 역할컴파일러는 단순히 사람이 작성한 코드를 아무생각없이 기계어로 바꿔주는 것이 아니다.데이터가 저장공간에 어떻게 저장되고 사용될지를 관리하기도 한다.또 더 효율적인 코드가 되도록 코드를 바꿀 수도 있다.데이터 저장 위치 결정소프트웨어적인 관점에서 CPU는 연산장치, 레지스터, 메모리로 나눠서 이해해볼 수 있다.여기서 우리는 데이터를 레지스터에 저장할지, 메모리에 저장할지 결정해야한다.일반적으로 전역 변수나 static변수는 메모리에 저장한다.로컬 변수들 중에서도 배열, 구조체 같은 ..

CS/컴파일러 2025.12.27

[컴파일러 이론] 6. Bottom-up Parsing, LR grammars

LR grammar는 left-recursive, right-most derivation의 약자이다.이 문법을 사용해 만들어진 파서는 shift-reduce parser라고 부른다. Shift & Reducebottom-up parser는 derivation의 우변에 있는 내용을 좌변으로 되돌린다. 이 과정을 reduce라고 한다.즉 시작을 최종 식에서부터 하여 역으로 시작 심볼로 변환하는 방법이다. right-most derivation은 변환해야될 식에서 오른쪽부터 살펴보며 reduce를 한다는 뜻이다.int*int+int라는 에시에 대해 단계별로 parser가 동작하는 과정을 나타낸 것이다.shift는 당장 reduce가 될 수 없을 때 stack에 임시 저장해놓는 행동이다.Action Select..

CS/컴파일러 2025.12.25

[Softeer] HSAT 4회 기출 - 통근버스 출발 순서 검증하기

문제현대자동차그룹 연구소에서는 임직원들의 편의를 위해 출퇴근 통근 버스를 제공하고 있다. 퇴근 시간이 되면 연구소 주차장에는 수 많은 버스들이 일렬로 주차되어 있다.퇴근 버스는 번호순서 대로 출발해야 하는데, 주차장은 폭이 좁아 앞의 버스가 모두 나가야 뒤의 버스가 나갈 수 있는 구조로 되어 있다. 버스를 순서에 맞게 출발시키기 위해, 연구소 주차장의 맞은편에 임시 주차장을 추가로 건설하였다.이렇게 만든 임시 주차장은 출입구가 하나밖에 없는 데다가, 폭이 좁아서 Stack처럼 맨 처음 들어간 버스는 맨 마지막에 나올 수 있다.또한, 한 번 임시 주차장으로 이동했던 버스는 다시 원래의 주차장으로 이동할 수 없다. 위와 같은 상황에서 퇴근 버스를 번호 순서대로 출발시키는 문제는 스택 정렬로 모델링할 수 있다..