함수형 프로그래밍에서는 거의 모든 데이터 구조가 불변이므로 상태를 변경해야 할 때 새 구조가 생성됩니다. 이것이 더 많은 메모리 사용량을 의미합니까?
이는 데이터 구조, 수행 한 정확한 변경 사항 및 경우에 따라 최적화 프로그램에 따라 다릅니다. 예를 들어 목록 앞에 추가하는 것을 고려해 봅시다.
list2 = prepend(42, list1) // list2 is now a list that contains 42 followed
// by the elements of list1. list1 is unchanged
여기에서 추가 메모리 요구 사항은 일정하므로 호출 비용도 마찬가지입니다 prepend
. 왜? 때문에 prepend
단순히이 새로운 세포 생성 42
머리로와 list1
꼬리로합니다. list2
이를 달성하기 위해 복사하거나 반복 할 필요가 없습니다 . 즉, 저장에 필요한 메모리는 제외한다 42
, list2
사용되는 동일한 메모리를 재사용한다 list1
. 두 목록 모두 변경할 수 없으므로이 공유는 완벽하게 안전합니다.
마찬가지로, 균형 잡힌 트리 구조로 작업 할 때 대부분의 작업에는 로그의 양의 추가 공간 만 있으면되므로 모든 경로는 공유되지만 트리의 경로는 하나만 공유 될 수 있습니다.
배열의 경우 상황이 약간 다릅니다. 많은 FP 언어에서 배열이 일반적으로 사용되지 않는 이유입니다. 당신이 좋아하는 일을 할 경우, arr2 = map(f, arr1)
그리고 arr1
이 선 후 다시 사용되지 않습니다, 스마트 최적화 프로그램은 실제로 변이합니다 코드를 생성 할 수 있습니다 arr1
(프로그램의 동작에 영향을주지 않고) 대신 새로운 배열을 만드는합니다. 이 경우 성능은 명령형 언어와 같습니다.