int main() {
int a, b;
....
}
여기서 a랑 b는 끝까지 남아있다고 하는데
그럼 파이썬 같은경우는 가비지 컬렉터를 쓰자나? gc는 reference count 세서 메모리 관리해주고?
그럼 파이썬에서
a=1
b=1
add(a,b)
하면 add함수 끝나고 a랑 b는 남아있음 안남아있음?
a랑 b는 add함수이후에 reference count 0되서 없어져야되는거 아님?
int main() {
int a, b;
....
}
여기서 a랑 b는 끝까지 남아있다고 하는데
그럼 파이썬 같은경우는 가비지 컬렉터를 쓰자나? gc는 reference count 세서 메모리 관리해주고?
그럼 파이썬에서
a=1
b=1
add(a,b)
하면 add함수 끝나고 a랑 b는 남아있음 안남아있음?
a랑 b는 add함수이후에 reference count 0되서 없어져야되는거 아님?
레퍼런스 카운트가 0이라고 바로 소멸되는게 아님 GC 자체적으로 주기적으로 혹은 어떤 이벤트에 의해서 소멸되고는 하는데 그게 불규칙해서 이런저런 똥꼬쇼 많이들 하는 것 같더라 매니지드 언어는 잘 모르겠다
파이썬 gc는 순환참조 해결용으로 개발자가 직접 부를수도있네요.
https://docs.python.org/ko/3.7/library/gc.html
싱기방기..
취준생님 먼가 많이알고있는거같은데 그럼 a,b는 끝까지 남는거고 c = [1,2,3,4] 이렇게하면 c는 나중에 사라짐? 이거 답변좀 ㅇㅅㅇ
스택메모리에 gc가 왜돌아가 걍 함수리턴되면서 없어지는 데이턴데 gc는 힙영역에 할당했던 메모리 더이상 안쓰는거 정리해주는거고
그럼 a,b는 끝까지 남는거고 c = [1,2,3,4] 이렇게하면 c는 나중에 사라짐?
파이슨에서 변수는 ㄹㅇ 별명같은거 아녔나
a = 1 b = 1하면 a, b 전부 객체 1을 가르키는거 (레퍼런스 카운트 2)고 쓸 일 없다 싶으면(카운트가 0 되면) 객체 1을 gc가 수거해 가는거 아녔나... 암튼 디게 특이했던걸로 기억함
1이 객체취급이 된다는소리임??
ㅇㅇ 1은 객체임
"엄밀히 말하면 레퍼런스 카운팅 방식을 통해 객체를 메모리에서 해제하는 행위가 가비지 컬렉션의 한 형태지만 여기서는 순환 참조가 발생했을 때 cyclic garbage collector를 통한 가비지 컬렉션과 레퍼런스 카운팅을 통한 가비지 컬렉션을 구분했다."
1을 객체로 가정하는거임? 아니면 진짜 value 1이 객체라는거임?
진자 객체인걸로 아는데 파이슨 안쓴지 좀 되서 한번 찾아봐야게슴
1. 파이썬은 모든 값은 객체이다. 2. 단, 불변타입인 int, str이 들어오면 값복사가 일어난다. (call by value처럼) 3. 그 외에는 call by ref
즉 저기서는 a=1 과 b=1이 서로 다른 객체라고 해석할 수 있을것같은데?
a = 1 b = 1 print(id(a)); print(id(b)); 이렇게 찍어보니까 똑같은값 나오네 뭐지 ㅅㅂ;
a is b 해보면 True 나왔던걸로 기억하는데
어 그럼 값복사 부분은 머지 ㅅㅂ
값복사는 없나보네.. 내가 잘못된 설명글을 본건가
그건 힙영역에 저장되는 객체일때 rc가..
a= new Person() // a: ref count 1 b = new Person() // b : ref count 1 add(a,b)
레퍼런스라는게 뭔지부터 공부하고 레퍼런스카운트 이야기하셈 님이 올려놓은 메인함수에 포인터변수가 하나도 없는데 레퍼런스카운트가 있을수가 없음
근데 gc도 rc세냐?? jvm은 Gc root로부터 그래프 순회하는걸로 알고있어서 rc안세는걸로 알았는뒤..
파이슨 동작이 ㅈㄴ 특이함
오호..
파이선은 rc랑 gc 둘다 사용하나보네