가변 변수를 사용하면 메모리가 낭비 될 수 있는지 궁금합니다.변수로 변수를 전달하면 메모리가 낭비됩니까?
가 출력이 다음과 같은 두 가지 실시 예 (값 a
, b
및 c
)를 고려 동일해야
// Example 1
let mutable mut = Map.empty
mut <- mut |> Map.add "A" 0
let fA (m: Map<string,int>) x = m.["A"] + x
let a = fA mut 0 // 0
mut <- mut |> Map.add "B" 1
let fB (m: Map<string,int>) x = m.["A"] + m.["B"] + x
let b = fB mut 0 // 1
mut <- mut |> Map.add "C" 2
let fC (m: Map<string,int>) x = m.["A"] + m.["B"] + m.["C"] + x
let c = fC mut 0 // 3
가 Example 1
에서 각각의 기능은 가변 인수를 취하고 (I는 추정) 복사해야 그 논쟁의 총 3 부 작성합니다.
// Example 2
let mutable mut = Map.empty
mut <- mut |> Map.add "A" 0
mut <- mut |> Map.add "B" 1
mut <- mut |> Map.add "C" 2
let fA (m: Map<string,int>) x = m.["A"] + x
let fB (m: Map<string,int>) x = m.["A"] + m.["B"] + x
let fC (m: Map<string,int>) x = m.["A"] + m.["B"] + m.["C"] + x
let immut = mut
let a = fA mut 0 // 0
let b = fB mut 0 // 1
let c = fC mut 0 // 3
Example 2
에서 각 함수는 동일한 불변의 인수를 복사합니다. 아마도 컴파일러는 이러한 복사본을 만들 때 추가 메모리를 사용하지 않을 정도로 똑똑합니다. 각 복사본에 대해 원래 개체에 대한 포인터 일 수 있습니다.
따라서 평균적으로 Example 1
에 복사 된 개체가 Example 2
에있는 불변 개체보다 작 으면 Example 2
에 사용되는 메모리가 줄어 듭니다.
이 논리가 정확합니까?
아니, 아무것도 이제까지 복사되지 않습니다. 참조가 가리키는 데이터 구조의 변경 가능성과 참조의 변경 가능성을 혼동하고 있습니다. –