Comparison
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ ๋๋ต์ ์ธ ๋น๊ต์ ๋๋ค.
Here is a rough comparison of the memory management techniques.
Pros of Different Memory Management Techniques
- C์ ๊ฐ์ ์๋ ๊ด๋ฆฌ:
- ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์์.
- JAVA์ ๊ฐ์ ์๋ํ ๊ด๋ฆฌ:
- ์์ ํ ์๋ํ.
- ์์ ํ๊ณ ์ ํํจ.
- C++๊ณผ ๊ฐ์ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:
- ๋ถ๋ถ ์๋ํ
- ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์์.
- ๋ฌ์คํธ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ์ํ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:
- ์ปดํ์ผ๋ฌ์ ์ํด ์ํ๋ฉ๋๋ค.
- ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
- ์์ ํ๊ณ ์ ํํฉ๋๋ค.
- Manual like C:
- No runtime overhead.
- Automatic like Java:
- Fully automatic.
- Safe and correct.
- Scope-based like C++:
- Partially automatic.
- No runtime overhead.
- Compiler-enforced scope-based like Rust:
- Enforced by compiler.
- No runtime overhead.
- Safe and correct.
Cons of Different Memory Management Techniques
- C์ ๊ฐ์ ์๋ ๊ด๋ฆฌ:
- ์ฌ์ฉ ํ ํด์ ๋ฌธ์
- ์ด์ค ํด์ ๋ฌธ์
- ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์
- JAVA์ ๊ฐ์ ์๋ํ ๊ด๋ฆฌ:
- GC์ ์ผ์์ค์ง
- ์๋ฉธ์ ์ง์ฐ ๋์
- C++๊ณผ ๊ฐ์ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:
- ๋ณต์กํ๋ฉฐ ๊ฐ๋ฐ์์ ์ํด์ ์ต์ ํ๊ฐ ํ์ํจ
- ์ฌ์ฉ ํ ํด์ ๋ฌธ์ ๊ฐ๋ฅ์ฑ ์์
- ๋ฌ์คํธ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ์ํ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:
- ์ฝ๊ฐ์ ์ด๊ธฐ ๋ณต์ก์ฑ
- ์ ํจํ ํ๋ก๊ทธ๋จ(๋ก์ง)์ด ๊ฑฐ๋ถ ๋ ์ ์์
- Manual like C:
- Use-after-free.
- Double-frees.
- Memory leaks.
- Automatic like Java:
- Garbage collection pauses.
- Destructor delays.
- Scope-based like C++:
- Complex, opt-in by programmer.
- Potential for use-after-free.
- Compiler-enforced and scope-based like Rust:
- Some upfront complexity.
- Can reject valid programs.