๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)์˜ ๊ฐœ๋…๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

2022. 7. 10. 13:33ยท๐Ÿ“ Language/โœ Language

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ž€ ๋™์  ํ• ๋‹นํ•œ ๋’ค ํ•ด์ œ๋ฅผ ํ•˜์ง€ ์•Š์•„ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณ„์† ์œ ์ง€ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๊ณ„์†๋˜๋ฉด ๊ฒฐ๊ตญ OOM(Out Of Memory) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋” ์ด์ƒ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ(์ž๋ฐ” JVM)์ด ์ข…๋ฃŒ๋˜๋Š” ์ตœ์•…์˜ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. C++

1) RAII(Resource Acquisition Is Initialization)

RAII์€ ์ง์ ‘ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์–ธ์–ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ํŒจํ„ด์ด๋‹ค. ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์‚ฌ์šฉ์ด ๋๋‚ฌ์„ ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์ œ๋ฅผ ํ•ด์ฃผ๋ฉฐ exception์ด ๋ฐœ์ƒํ•ด๋„ ํš๋“ํ•œ ์ž์›์ด ํ•ด์ œ๋จ์„ ๋ณด์žฅํ•œ๋‹ค.

 

2) ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ(Smart Pointer)

C++์˜ RAII๋Š” ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ์ด๋‹ค.

  • unique_ptr: ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ(๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)๋ฅผ ๋‹จ ํ•˜๋‚˜์˜ ํฌ์ธํ„ฐ๋งŒ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
#include <iostream>

class A {
	int* data;

public:
	A() {
		std::cout << "์ž์›์„ ํš๋“ํ•จ!" << std::endl;
		data = new int[100];
	}
	~A() {
		std::cout << "์ž์›์„ ํ•ด์ œํ•จ!" << std::endl;
		delete[] data;
	}

	void some() { std::cout << "์ผ๋ฐ˜ ํฌ์ธํ„ฐ์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ!" << std::endl; }
};

int main() {
	A* a = new A();    
	std::unique_ptr<A> ptr(a);
	ptr->some();
}

// ์ž์›์„ ํš๋“ํ•จ!
// ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์™€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ!
// ์ž์›์„ ํ•ด์ œํ•จ!
  • shared_ptr: ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ(๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)๋ฅผ ๋™์‹œ์— ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋•Œ ์ฐธ์กฐ ๊ฐœ์ˆ˜๋ฅผ ๋ช…๋ช…ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์ด ๊ฐœ์ˆ˜๊ฐ€ 0์ด๋ผ๋ฉด ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • weak_ptr: shared_ptr์˜ reference counter๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

 

2. JAVA, C#

1) ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ(Garbage Collector)

GC๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋” ์ด์ƒ ์“ฐ์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„์„œ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ Heap ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํ•ด์ œ์‹œ์ผœ ๊ฐ€์šฉํ•œ ๊ณต๊ฐ„์„ ๋งŒ๋“ ๋‹ค.

  • ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ธ์ œ ๋˜์ฐพ์•„์˜ฌ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค.

 

3. ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(StackOverflow)

ํ”„๋กœ๊ทธ๋žจ์ด ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํƒ ๊ณต๊ฐ„์˜ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์† ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋Š” ์Šคํƒ์— ๊ณ„์† ์Œ“์ด๊ฒŒ ๋˜๋Š”๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์„ ๋„˜์–ด์„œ๋ฉด ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • C#์€ ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๋กœ ์ธํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • C++์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์—†์–ด์„œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜ค๋ฅ˜๊ฐ€ ๊ฐ์ง€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ง€๋˜์ง€ ์•Š์œผ๋ฉด ์ดˆ๊ณผ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฎ์–ด์“ฐ๋ ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ Language' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ •๋ฆฌ
  • ์ปดํŒŒ์ผ ๊ณผ์ •
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)์™€ ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)
  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Functional Programming)
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)์˜ ๊ฐœ๋…๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”