CS · Memory
GC가 있어도 샌다 - 치워지지 않는 것들
회수기는 안 쓰는 것을 치우지 않는다. 안 닿는 것을 치운다. 이 한 마디 차이에서 자동 회수 언어의 메모리 누수가 통째로 나온다. 어떤 코드가 안 쓸 것을 붙들고 있는지, 그리고 새는 것과 그냥 많이 쓰는 것을 어떻게 가르는지 본다.
메모리의 수명 6편
CS · Memory
멈춤 시간 - 치우는 동안 프로그램은 선다
자동 회수는 공짜가 아니라 시간으로 값을 치른다. 왜 치우는 동안 프로그램을 세워야 하는지, 왜 대부분의 객체가 금방 죽는다는 관찰이 회수기의 설계를 통째로 바꿨는지, 그리고 무엇과 무엇을 맞바꾸는지 본다.
메모리의 수명 5편
CS · Memory
도달 가능성 - 닿을 수 있으면 살아 있다
세는 대신 따라가 본다. 정해진 출발점에서 참조를 타고 갈 수 있으면 살아 있고, 못 가면 버린다. 세는 방식이 못 풀던 고리가 왜 이 방식에서는 저절로 풀리는지, 그리고 그 대신 무엇을 잃는지 본다.
메모리의 수명 4편
CS · Memory
참조 세기 - 아무도 안 보면 버린다
가리키는 곳이 몇 개인지를 세다가 0이 되면 그 자리를 돌려준다. 가장 단순하고 가장 즉시적인 자동 회수 방식이다. 세는 값이 어디서 나가는지, 그리고 이 방식이 절대 못 푸는 한 가지가 무엇인지 본다.
메모리의 수명 3편
CS · Memory
손으로 돌려주기 - 두 번 놓거나 한 번도 안 놓거나
반납을 사람이 적으면 실패하는 방식이 셋이다. 안 놓거나, 두 번 놓거나, 놓고 나서 또 쓰거나. 이 단순해 보이는 일을 왜 사람이 자꾸 틀리는지, 그리고 왜 그 버그가 하필 엉뚱한 데서 터지는지를 본다.
메모리의 수명 2편
CS · Memory
메모리 회수 - 빌린 자리는 돌려줘야 한다
프로그램은 실행되는 내내 메모리를 얻는다. 얻는 건 한 줄인데 돌려주는 건 왜 어려운가. 스택은 저절로 치워지고 힙만 문제로 남는 이유부터, 안 돌려준 자리가 프로그램을 어떻게 죽이는지까지 본다.
메모리의 수명 1편
OS · Stack
지역변수와 new는 어디에 사나 - 스택과 힙
같은 주소공간 안에서도 지역변수와 직접 할당한 객체는 사는 곳이 다르다. 함수마다 쌓였다 자동으로 치워지는 스택, 직접 얻어 오래 두는 힙 - 스택 오버플로와 메모리 누수가 왜 생기는지가 여기서 갈린다.
프로그램은 어떻게 도나 3편
OS · Process
프로그램이 실행되면 무엇이 되나 - 프로세스
디스크의 파일 하나가 실행되면 프로세스가 된다. 자기만의 메모리, 열어둔 자원 목록, 어디까지 실행했는지 - 프로세스가 받는 세 가지를 보면, 왜 프로그램끼리 서로의 메모리를 못 건드리는지가 풀린다.
프로그램은 어떻게 도나 1편