본문 바로가기

레퍼런스 카운트3

3. C언어 레퍼런스 카운팅 방법의 한계 및 팁 들 본 포스트는 https://www.kernelpanic.kr/35와 https://www.kernelpanic.kr/36를 읽었다는 것은 전제로 작성되었다. 앞의 두 포스트를 먼저 읽고 오기를 바란다. 레퍼런스 카운팅 방법의 한계 레퍼런스 카운팅은 C언어에서 쉽고 효율적으로 메모리 관리를 할 수 있는 방법이다. 이 방법을 사용하면 대부분의 메모리 누수 관련 버그를 회피할 수 있지만 회피할 수 없는 누수도 있다. 순환참조(Circular Reference) 이슈이다. 순환참조는 둘 혹은 그 이상의 객체가 서로를 참조하는 상황이다. 예를 들자면 A 객체가 B 객체를 참조하고, B 객체가 A 객체를 참조하는 상황이다. 조금 꼬아본다면 A 객체가 B 객체를 참조하고, B 객체가 C 객체를 참조하는 상황에서 C .. 2021. 5. 21.
2. 메모리 누수 없는 C언어 프로그래밍 (3/3) - 레퍼런스 카운트 2부 이전 포스트들에서 다룬 규칙을 다시 한 번 더 확인해보자. (규칙1) 가능하다면 메모리 할당과 해제는 한 코드 블록 안에서 한 번만 (규칙2) 메모리 할당과 해제가 한 블록 이내에서 이뤄질 수 없다면 레퍼런스 카운트를 활용 이전 포스트에 이어지는 내용으로 이전 포스트를 읽지 않았다면 먼저 읽기를 강력히 권한다. ("2. 메모리 누수 없는 C언어 프로그래밍 (2/3) - 레퍼런스 카운트 1부" (www.kernelpanic.kr/35)) 이전 포스트에서는 규칙 2를 구현하는 간단한 방법에 대해서 살펴보았다. 이번 포스트에서는 앞에서 살펴본 구현의 취약점을 살펴보고 코드를 좀 더 정교하게 구현하는 방법에 대해서 살펴본다. 레퍼런스 카운트가 제대로 해제되지 않는 경우 앞서 우리는 레퍼런스 카운트(이하 rc)를.. 2021. 5. 13.
2. 메모리 누수 없는 C언어 프로그래밍 (2/3) - 레퍼런스 카운트 1부 앞선 포스트에서 C언어에서 메모리 누수를 피할 수 있는 두 가지 규칙을 소개하고, 규칙1 "가능하다면 메모리 할당과 해제는 한 코드 블록 안에서 한 번만"에 대해서 다뤘다. (www.kernelpanic.kr/34) 규칙1은 간단하고 강력하지만 규칙1을 적용할 수 없는 예외적인 상황들이 있다. 이 경우에 사용 가능한 방법이 규칙 2 "메모리 할당과 해제가 한 블록 이내에서 이뤄질 수 없다면 레퍼런스 카운터를 활용"이다. 이번 포스트에서는 어떤 경우에 규칙1을 적용할 수 없는지, 그리고 레퍼런스 카운터를 활용하는 방법에 대해서 다루도록 한다. (규칙1) 가능하다면 메모리 할당과 해제는 한 코드 블록 안에서 한 번만 (규칙2) 메모리 할당과 해제가 한 블록 이내에서 이뤄질 수 없다면 레퍼런스 카운트를 활용 .. 2021. 5. 5.