COW
Copy-On-Write
- 컴퓨터 프로그래밍에서 복사 동작을 할 때, 실제 원본이나 복사본이 수정되기 전까지 복사를 하지 않고 원본 리소스를 공유하며 원본이나 복사본에서 수정이 일어날 경우, 그때 복사하는 작업을 수행하는 기술
- 간단하게 말해, 수정(쓰기)이 발생할 때 복사한다는 의미
작동 원리
- 기존에 알고있던 바로는 A에 대한 값을 B에 복사한다면 다음과 같이 값을 가지게 된다고 이해하고 있습니다.
- 하지만 COW를 쓴다면, 다음과 같이 B가 A의 복사한 값을 가지고 있는 것이 아닌 참조하고 있는 상태가 됩니다.
- 현재 상태에서 A(원본)나 B(복사본)의 값을 수정한다면, 복사가 이루어져 B객체의 값이 메모리에 할당됩니다.
예제
- 실제로 배열을 만들어서 메모리 주소를 확인해보겠습니다.
- 배열 두 개를 만들고, 배열의 값을 수정하기 전에 주소값을 출력해보면 같은 값이 출력됩니다.
- 하지만 array1의 값을 바꿔주고 다시 같은 배열의 주소값을 출력해보면 바뀐 값에 따라 주소 값이 달라진 것을 확인할 수 있습니다.
var array1 = [1,2,3]
var array2 = array1
//a
array1.withUnsafeBufferPointer { (point) in
print(point)
}
//b
array2.withUnsafeBufferPointer { (point) in
print(point)
}
array1[0] = 4
//c
array1.withUnsafeBufferPointer { (point) in
print(point)
}
//d
array2.withUnsafeBufferPointer { (point) in
print(point)
}
// 실행결과
// a: UnsafeBufferPointer(start: 0x00000000082d4410, count: 3)
// b: UnsafeBufferPointer(start: 0x00000000082d4410, count: 3)
// c: UnsafeBufferPointer(start: 0x000000000824ec60, count: 3)
// d: UnsafeBufferPointer(start: 0x00000000082d4410, count: 3)
내용 출처
https://babbab2.tistory.com/18
Swift) COW (Copy-on-Write)
안녕하세요 소들입니다 😞 오늘은 뭔가 축축 쳐지는 날이네요 며칠 째 계속되는 장마 탓도 있고.. (비 혐오자) 개발과는 참 애증의 관계인 것인지.. 공부할 건 너~~~~~~무 많고..ㅜㅜ 멋진 개발자
babbab2.tistory.com
[iOS] Swift Memory - COW (Copy On Write)
COW 처음 들어보는 분들도 있을거에요 정의를 먼저 말하자면 수정(쓰기)가 일어날때 복사한다 라는 뜻이에요 스위프트의 CollectionType인 Array, Dictionary, Set에 적용되는 개념이에요 참조를 통해서 불
nsios.tistory.com