각 함수별로 테스트를 위해 중간중간에 테스트 코드를 삽입해서 확인했습니다.
함수나 기능단위의 유닛 테스트
가 정말 중요하다는 것을 알게 되었습니다.
한번에 다 하고 테스트 하면 어디서 틀린지도 모르니까요!
this.#push(123);
this.#push(456);
this.#pop();
this.#pop();
this.#malloc("BOOL", 4);
this.#malloc("INT", 1);
this.#malloc("TEST", 1);
this.#free(0x0);
const str = "VAR B: BOOL[4]";
const asm = new ASMParser(str);
const res = asm.analyze();
console.log(res);
const str2 = "CALL foo()";
const asm2 = new ASMParser(str2);
const res2 = asm2.analyze();
console.log(res2);
프로세스란 운영체제 입장에서 하나의 작업단위이며, 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미합니다.
가상 메모리는 다음 그림과 같이 관리됩니다.
어떠한 값을 저장할때는 Stack
과 Heap
이 주로 사용되는데, 주요 차이는 다음과 같습니다.
스택 | 힙 |
---|---|
프로그램이 자동으로 사용하는 영역 | 프로그래머가 필요할 때마다 사용하는 동적인 영역 |
메모리에 로드될 때 스택 사이즈는 고정 | 메모리 주소 값에 의해서만 참조되고 사용 |
복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장 | 필요한 데이터를 동적으로 할당해서 저장할 때 사용 |
스택 자료구조로 LIFO(후입선출) | 메모리 빈 공간에 적절히 할당 및 해제됨 |
스택, 힙은 같은 공간을 공유하는데, 힙이 낮은 주소부터, 스택은 높은 주소부터 할당됩니다.
각 영역이 상대공간을 침범하면 Overflow가 발생한다고 하는데, 이를 각각 Stack Overflow, Heap Overflow라고 합니다.