이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
정재영00
가입: 2019년 9월 12일 올린 글: 13
|
올려짐: 2019년11월15일 19:00 주제: 6-2 memory limit관련 질문있습니다 |
|
|
GC관련해서 의문점이 생겨서 질문드립니다.
memory limit를 1로 수정하고
PUSH(Val(Z 10))
MALLOC
PUSH(Val(Z 5))
MALLOC
STORE
PUSH(Val Unit)
이런 코드를 실행하면,
메모리 제한이 1임에도 불구하고
메모리에는
<1,0> : 10
<2,0> : 5
가 들어가게됩니다
이런 상황이 일어날 수 있다고 의도된 것인가요?
아니면 저희가 이런 상황이 생기지 않도록 gc를 구현해야하는건가요? |
|
위로 |
|
|
조민기
가입: 2015년 9월 6일 올린 글: 82
|
올려짐: 2019년11월15일 23:10 주제: |
|
|
제가 질문을 제대로 이해했는지 잘 모르겠습니다.
메모리 제한보다 많은 메모리가 필요해서 GC로도 메모리를 확보하지 못하는 경우를 말씀하시는 건가요?
그렇다면 보충 스펙에 명시된대로 GC_Failure 예외를 발생시키셔야 합니다. |
|
위로 |
|
|
정재영00
가입: 2019년 9월 12일 올린 글: 13
|
올려짐: 2019년11월15일 23:40 주제: |
|
|
gc로도 메모리를 확보하지 못하는 상황이 아니라,
메모리 제한을 1로 바꾸어도 테스트 결과 저 코드가 문제없이 동작합니다(STORE를 2번해야되네요)
mem limit이 1일 때,
접근가능한 메모리가 1개인 상태에서 MALLOC을 하면 GC_failure가 뜰텐데,
PUSH(Val(Z 10))
MALLOC
PUSH(Val(Z 5))
MALLOC
STORE
STORE
이런식으로 테스트를하면 두 번째 MALLOC을 할 때 환경이나 메모리에는 아무값도 없기 때문에 에러가 안 나지 않나요?
하지만 두 번의 STORE를 진행하면
메모리에는
<1,0> : 10
<2,0> : 5
가 들어가게됩니다(메모리 제한을 1로 바꾸었음에도 불구하고)
그래서 gc를 할 때 환경뿐만 아니라 스택에 있는 location들도 reachable_loc에 추가해야되는지 궁금합니다
혹시 제가 뭔가 잘못이해하고 있는거라면
메모리제한을 1로 수정했을 때,
PUSH(Val(Z 10))
MALLOC
PUSH(Val(Z 5))
MALLOC
STORE
STORE
을 수행하면 어느 명령어에서 에러가 떠야하나요(혹은 뜨지 않나요)? |
|
위로 |
|
|
조민기
가입: 2015년 9월 6일 올린 글: 82
|
올려짐: 2019년11월16일 1:16 주제: |
|
|
말씀하신 예제에서 문제 없이 실행되는 것이 맞습니다. malloc할 때 메모리가 늘어나는 것이 아니라 첫 store를 할 때 늘어나기 때문에 생겨난 이상한 케이스입니다(순간 메모리 사용량이 memory limit을 넘어도 다음 malloc을 만나기 전까지 GC가 실행되지 않겠네요).
채점을 할 때는 말씀하신 예제처럼 malloc만 하고 첫 store를 하기 전에 다른 malloc을 하는 케이스는 사용하지 않겠습니다.
stack의 location도 reachable location이 맞습니다(즉, GC되면 안 됩니다). 다만 이 문제와 어떻게 연관이 되는 건지 잘 모르겠습니다. |
|
위로 |
|
|
정재영00
가입: 2019년 9월 12일 올린 글: 13
|
올려짐: 2019년11월16일 1:39 주제: |
|
|
답변감사합니다!
그런데 만약 stack에 있는 location들도 reachable location이라면,
저 예제에서 두 번째 MALLOC할 때 이미 stack에 <1,0>이 있으니
GC_FAILURE에러를 띄워야하는거 아닌가요? |
|
위로 |
|
|
조민기
가입: 2015년 9월 6일 올린 글: 82
|
올려짐: 2019년11월16일 13:29 주제: |
|
|
저희가 제공해드린 malloc_with_gc의 뼈대 코드를 보시면 reachable하지 않은location들을 전부 메모리(주소와 값 페어의 리스트)에서 제외시킨 뒤 메모리의 길이가 limit보다 크면 GC_failure를 발생시킵니다.
따라서 올려주신 코드의 두번째 malloc을 실행해도 메모리는 여전히 비어 있으므로 GC가 실행되지 않는 것이 맞습니다. |
|
위로 |
|
|
정재영00
가입: 2019년 9월 12일 올린 글: 13
|
올려짐: 2019년11월16일 13:47 주제: |
|
|
이해가 됐습니다! 감사합니다 |
|
위로 |
|
|
|