2017-11-06 2 views
0

: https://elixir-lang.org/getting-started/basic-types.html는 말했다 :이 없습니다 만 튜플 자체에 그 내용을 적용튜플을 업데이트 할 때 공유되는 항목은 무엇입니까? 공식 문서에서

iex> tuple = {:a, :b, :c, :d} 
iex> put_elem(tuple, 2, :e) 
{:a, :b, :e, :d} 

하는 것으로. 인스턴스의 경우 튜플을 업데이트하면 대체 된 항목을 제외하고 모든 항목이 이전 튜플과 사이에서 공유됩니다. 다른 단어에서, 엘릭서의 튜플 및 목록은 콘텐츠를 공유 할 수 있습니다. 이는 언어 이 필요로하는 메모리 할당량을 줄이고 언어의 변경 불가능한 의미 덕분에만 가능합니다. 변화하는 동안 튜플, 이전 및 단지 얼랑처럼 새로운 메모리를 데이터를 공유하는 대신 할당에 대해 동일한 메모리 주소를 사용하여 새로운 튜플 :

는 뜻인가?

답변

1

이것은 튜플의 값이 복제되지 않는다는 것을 의미합니다.

예를 들어 Erlang의 작은 정수는 1 단어의 메모리를 차지하며 튜플은 각 요소의 2 단어 + 크기를 차지합니다. 이제 튜플 {{1, 2, 3}, {4, 5, 6}}을 만들면 그 단어는 2 + (2 + 3) + (2 + 3) = 12입니다. 지금 {{1, 2, 3}, 4}을 만들 put_elem(tuple, 1, 4)을 할 경우

, 그것은 지수 원래 튜플 ({1, 2, 3})의 0에있는 요소를 복제,하지만 크기 2 + 정수 4의 새로운 튜플을 생성 할 수 있습니다. 추가 메모리 2 + (2 + 3) + 1 대신 메모리 사용량이 2 + 1입니다. 값 {1, 2, 3}은 두 튜플간에 공유됩니다.

Source for the amount of memory used by different data structures in Erlang.

erlang과 똑같습니까?

예, 엘 릭어의 튜플은 얼랑의 튜플과 동일한 의미를가집니다.