[ Effective C++ ] 항목 50 : new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자

Minsu._.Lighting·2023년 12월 16일
0

[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "

[핵심]

" 제목이 곧 핵심! "

  • 개발자가 스스로 사용자 정의 new 및 delete를 작성하는 데는 수행 성능을 향상시키려는 목적, 힙 사용 시의 에러를 디버깅하려는 목적, 힙 사용 정보를 수집하려는 목적 등, 여러 가지 나름대로 타당한 이유가 있다!

💡 기본제공 new 및 delete를 언제 바꿔야 할까?

📌 잘못된 힙 사용을 탐지하기 위해

- new한 메모리에 delete를 하는 것을 잊어버려 메모리가 누출 되거나 또는 한 번의 new에 여러번의 delete를 하는 실수를 줄일 수 있다

- 데이터 오버런, 언더런 등을 방지할 수 있다

📌 동적 할당 메모리의 실제 사용에 관한 통계 정보를 수집하기 위해

  • 할당된 메모리 블록의 크기는 어떤 분포를 보이는지?
  • 할당된 메모리 블록 각각의 사용 기간은 또 어떤 분포를 보이는지?
  • 메모리가 할당되고 해제되는 순서가 FIFO(선입선출)인지, LIFO(후입선출)인지, 아니면 랜덤인지?
  • 시간 경과에 따라 사용 패턴이 바뀌는지?
  • 한 번에 실제로 쓰이는 동적 할당 메모리의 최대량은 어떤지?
  • 사용자 정의 operator new 및 operator delete를 사용하면 위와 같은 많은 정보들을 쉽게 얻을 수 있다

📌 할당 및 해제 속력을 높이기 위해

- 기본으로 제공되는 범용 할당자는 사용자 정의 버전보다 꽤 느린 경우가 많다

📌 기본 메모리 관리자의 공간 오버헤드를 줄이기 위해

- 범용 메모리 관리자는 사용자 정의 버전과 비교해서 속력이 느린 경우도 많은데다가 메모리도 많이 차지하는 사례가 많다

📌 적당히 타협한 기본 할당자의 바이트 정렬 동작을 보장하기 위해

- x86 아키텍쳐에서는 double이 8바이트 단위로 정렬되어 있을 때 읽기 · 쓰기 속도가 가장 빠르다, 기본 제공 new가 double에 대한 동적 할당 시 8바이트 정렬을 보장하지 않는 컴파일러라면 8바이트 정렬을 보장하는 사용자 정의 버전 new를 만들어 사용하면 수행 성능을 끌어올릴 수 있다

📌 임의의 관계를 맺고 있는 객체들을 한 군데에 나란히 모아 놓기 위해

- 메모리 군집화는 위치지정 new 및 위치지정 delete를 통해 쉽게 구현할 수 있다

📌 그때그때 원하는 동작을 수행하도록 하기 위해

- 기본 제공이 아닌 내가 원하는 동작을 필요로 할 때 사용자 정의를 사용한다

profile
오코완~😤😤

0개의 댓글

관련 채용 정보