본문 바로가기

메모리 관리2

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.
1. C언어 메모리 관리의 어려움 (1/2) - C언어 메모리 구조 포인터는 C언어의 가장 큰 강점이자 우리를 늘 메모리 관련 문제로 괴롭히는 큰 위험요인이다. 많은 좋은 프로그램들이 C언어의 포인터 기교를 사용해서 엄청난 메모리 / 성능상의 이득을 얻었다. 몇년도 전이지만, 아직도 리눅스 커널과 리눅스의 tcp/ip 스택에서 C언어 포인터를 활용한 것을 처음 봤을때의 신선한 충격이 생생하다. 훌륭한 프로그래밍 언어들이 많이 나왔지만 여전히 C의 포인터만큼 HW 직관적이고 강력한 개념은 없는 것 같다. 그러나 동시에 포인터는 원인을 찾기 어려운 버그들을 만들어 내곤 한다. 특히 어떤 버그들은 원인을 찾고서도 고치기가 몹시 난해한 경우들도 있다. 이는 훌륭한 프로그램에서도 예외가 아니다. 모질라 재단은 파이어폭스의 메모리 누수 문제로 수 년간 씨름하다가 결국 C++로 개발.. 2021. 4. 27.