토픽 122 / 122·비교표
코드 실행 체계 (Code Execution Model)
컴파일러 vs 인터프리터
| 항목 | 컴파일러 | 인터프리터 |
|---|---|---|
| 번역 방식 | 전체 코드 사전 번역 | 줄 단위 즉시 실행 |
| 실행 속도 | 빠름 | 느림 (10-100배) |
| 오류 발견 | 컴파일 시 (사전) | 실행 시 (런타임) |
| 디버깅 | 어려움 | 대화형 (REPL) |
| 적용 | C, C++, Rust, Go | Python, Ruby, Bash |
JIT vs AOT
| 항목 | JIT | AOT |
|---|---|---|
| 컴파일 시점 | 실행 중 (런타임) | 실행 전 (빌드 시) |
| 시작 시간 | 느림 (웜업 필요) | 빠름 (즉시 실행) |
| 최적화 | 동적 (프로파일 기반) | 정적 (컴파일 시) |
| 메모리 | 큼 (컴파일러 포함) | 작음 (네이티브 바이너리) |
| 적용 | Java (HotSpot), JavaScript (V8) | Go, Rust, GraalVM Native |
스택 VM vs 레지스터 VM
| 항목 | 스택 기반 VM | 레지스터 기반 VM |
|---|---|---|
| 연산 방식 | 스택에 push/pop | 가상 레지스터 사용 |
| 구현 | 간단 | 복잡 |
| 코드 크기 | 작음 (0-주소) | 큼 (레지스터 지정) |
| 실행 속도 | 느림 (스택 오버헤드) | 빠름 (명령어 수 적음) |
| 적용 | JVM, CLR, CPython | Lua VM, Dalvik |
WebAssembly vs JavaScript vs 컨테이너
| 항목 | WebAssembly | JavaScript | 컨테이너 |
|---|---|---|---|
| 포맷 | 바이너리 (.wasm) | 텍스트 (스크립트) | 이미지 (OS+앱) |
| 성능 | 네이티브 근접 | JIT 최적화 | 네이티브 |
| 언어 | 다중 (C/Rust/Go) | JS/TS | 모든 언어 |
| 크기 | 작음 | 중간 | 큼 |
| 격리 | 샌드박스 | 브라우저 보안 | OS 수준 격리 |
힙 vs 스택 (메모리 영역)
| 항목 | 힙 | 스택 |
|---|---|---|
| 할당 | 동적 (malloc/new) | 자동 (함수 호출 시) |
| 해제 | 수동 (free/GC) | 자동 (함수 반환 시) |
| 성장 방향 | 낮은→높은 주소 | 높은→낮은 주소 |
| 속도 | 느림 | 빠름 |
| 크기 | 큼 (GB 단위) | 작음 (MB 단위) |
| 관리 | 개발자/GC | 컴파일러 |