static 변수는 data 영역에
인스턴스 변수는 힙 영역에
로컬 변수는 콜스택 영역에
static과 로컬은 왜 저런 구조를 쓰는지 이해가 되는데
인스턴스 변수는 '왜?' 힙을 쓰는건지 모르겠음
구글링해봐도 왜 힙을 쓰는진 안 나오고 전부 그냥 힙을 쓴다.라고만 나와서
너무 궁금해
static 변수는 data 영역에
인스턴스 변수는 힙 영역에
로컬 변수는 콜스택 영역에
static과 로컬은 왜 저런 구조를 쓰는지 이해가 되는데
인스턴스 변수는 '왜?' 힙을 쓰는건지 모르겠음
구글링해봐도 왜 힙을 쓰는진 안 나오고 전부 그냥 힙을 쓴다.라고만 나와서
너무 궁금해
인스턴스의 생몰이 같은 위치에서 일어나지 않으니 스택에 있을 수거 없다. 로컬변수는 메서드리턴 시 다 정리되지만 인스턴스는 그렇게 했다간 segfault 지옥이 펼쳐질것
1. 스택은 차곡차곡쌓이기 때문에 원하는 객체만 소거가 불가능, 자료구조상 불리함만 존재 2. 데이터 영역은 말할것도 없으니 패스 3. 힙은 트리구조라 최상단의 객체가 그 어떠한 스택의 변수에도 참조되지 않을 경우 최상단 객체와 이어진 나머지 객체를 GC가 정리하기에도 용이함. 또 스택에서 그때그때 참조될 수 있으므로 힙-스택영역으로 분리해두면 좋음
메모리의 힙 영역은 이름만 heap이지 엉덩이 자료구조랑은 이름만 같고 상관 없음 혹시 혼동하시나 해서
찾아보니 진짜네;; 공부 다시 해야할듯... 감사합니다.
https://stackoverflow.com/questions/1699057/why-are-two-different-concepts-both-called-heap
잘못된
설명을 정정하기 위해 스오플 링크도 첨부합니다.
-5 votes의 한줄짜리 코멘트목록을 보면 힙 영역을 힙자료구조로 구현한다해도 딱히 장점이 없다는 의견이 있어서 특히 3번 설명이 잘못된것같네요.