그러니까 Swift가 Reference type은 extension func, final func이면 Static Dispatching을 하고 아니면 Virtual Table에서 찾고 Value type은 protocol func을 Protocol Withness Table에서 함수 포인터 찾아서 실행한다는걸 설명하라고?

그리고 Reference type은 Heap에 할당하고 Value type은 Stack에 할당하지만 Class의 내부 프로퍼티가 Struct인 경우 클래스 생성시점에 초기화하면 모두 Heap에 할당하지만 다른 조건에서는 Stack에 할당한다구?

Array는 Value type이지만 사실 내부 Container가 가리키는 주소는 Heap에 있고, CoW할때 값 변경 전까지는 arr1, arr2가 같은 주소를 갖고 있다는걸 알아야 한다는거지?

1

If you have a fediverse account, you can reply to this note from your own instance. Search https://hackers.pub/ap/notes/019957df-da80-7920-89cb-031d16577985 on your instance and reply to it.

Class Foo { } // Heap
Struct Bar { } // Stack

Class OuterClass {
  let innerStruct: Bar
   init(_ innerStruct: Bar) {
    self.innerStruct = innerStruct
  }
}

OuterClass(Bar()) // OuterClass: Heap, Bar: Heap
let bar = Bar()
OuterClass(bar) // OuterClass: Heap, Bar: Stack

var array1 = [1,2,3]
Memory.dump(variable: &array1) 
Memory.dump(with: array1)
var array2 = array1
Memory.dump(variable: &array2)
Memory.dump(with: array2)

array2.append(4)
0