TIL(Today I Learned)

12월 22일(목)

공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.

Class vs Struct

  • class는 call by reference (참조값 전달)
  • class는 Heap 메모리 영역에 할당
  • struct는 call by value (값 복사, Copy-on-Write)
  • struct는 Stack 메모리 영역에 할당
  • 왜 레퍼런스 타입이 벨류 타입보다 성능상 좋지 않은가?
    • Reference Counting Overhead 때문.

ARC vs Java Garbage Collection

  • ARC는 Reference Count가 0이 되면 메모리에서 해제하는 방식
  • Java Garbage Collection은 크게 Stop-the-World와 Mark-and-Sweep 두단계로 진행
    • 즉, 앱을 멈추고 스택의 모든 변수와 객체를 스캔하면서 사용되지 않는 메모리를 해제함

Stack vs Heap

  • Stack은 정적 변수를 저장하기 위해 사용. 메모리에 순차적으로 저장하며 지역변수, 매개변수를 저장.
  • Heap은 동적으로 메모리를 할당, 단편화(fragmentation) 우려가 있음.
  • Stack 메모리에 있는 데이터는 각각의 데이터를 갖고 있는 쓰레드만 접근 가능하지만, Heap 메모리에 있는 데이터는 모든 쓰레드에서 접근이 가능하여 Thread-Safe하지 않음. (객체 같은경우 레퍼런스를 통해 여기 저기서 접근가능하므로 Thread-Safe하지 않다는 의미인듯)

Hash Table

  • 해시 충돌 막는 방법
    • chaining: 같은 키의 버킷에 데이터를 이어서 넣는것
    • open address: 비어있는 키의 버킷에 데이터를 넣는것

참고