| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
장민석
가입: 2006년 9월 5일 올린 글: 165
|
올려짐: 2006년10월12일 11:08 주제: 3-1 메모리 allocation 구현 코드 중 이상한 부분 |
|
|
나눠주신 소스에 이미 구현된 코드 중 이해가 안 되는 부분이 있습니다.
| 코드: | fun allocate s (base, mem) =
let
fun range f t = if f < t then f :: (range (f + 1) t) else []
val base' = Loc.Base.succ base
val l = Loc.loc_of_base base'
in
(l, (base', List.fold_left
(fn m o => Map.add (Loc.addi l o) None m)
mem
(range 0 s)))
end |
이 코드에서
| 코드: | | val l = Loc.loc_of_base base' |
이 부분은
| 코드: | | val l = Loc.loc_of_base base |
이렇게 되어야 하는 게 아닌가요? initialize 되지 않은 fresh한 location을 반환해야하니까요. base'은 allocate되지 않은 가장 작은 location 아닙니까? |
|
| 위로 |
|
 |
장민석
가입: 2006년 9월 5일 올린 글: 165
|
올려짐: 2006년10월12일 11:22 주제: |
|
|
음..생각해보니 어떻게 해도 결과적으론 차이가 없군요. 해석 상의 차이가 있을 뿐이네요.
| 코드: | | val l = Loc.loc_of_base base' |
1. 이런 식으로 구현한 경우에는 단지 메모리의 정의가 (할당된 것 중 가장 큰 로케이션의 베이스, 바인딩 테이블)이 되는 것이군요.
2. 처음에 제가 주장한 식으로 구현을 하면 메모리가 (할당되지 않은 것 중 가장 작은 로케이션의 베이스, 바인딩 테이블)이 되는 것이고요.
그런데 숙제 2의 구현은 2.와 유사하게 되어있었던 것 같습니다. 그래서 좀 헷갈렸네요.
| 코드: | | fun allocate (n, m) = (n, (n + 1, Map.add n None m)) |
제가 이해한 것이 맞나요? |
|
| 위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년10월13일 18:32 주제: |
|
|
| 일단 내부 구현에 대해서 살펴보실 필요는 없지만, 크게 문제될 것이 없는 것 같습니다. 적절히 이해하시고 있는 것 같습니다. |
|
| 위로 |
|
 |
|