ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...48
    일지 2022. 8. 27. 12:11

    new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자

    new, delete를 바꾸는 이유

    일반적으로 다음과 같은 이유로 new와 delete를 새로 만들곤 한다.

    • 잘못된 힙 사용을 탐지하기 위해
      • 한 번 new 한 메모리를 두 번 이상 delete 하는 것을 막기 위해 메모리 목록을 저장하는 식으로 사용한다.
      • 메모리를 넘어서 쓰는 것을 막기 위해 메모리 앞, 뒤에 탐지용 바이트 패턴을 넣어두는 식으로 에러를 탐지한다.
    • 효율을 향상 시키기 위해
      • 기본 제공 new, delete는 보편적인 상황을 위해 만들어졌다.
      • 개발자가 자신의 프로그램의 동적 메모리 할당 성향을 잘 파악하고 있으면 새로 new, delete를 만드는 게 더 나을 수 있다.
    • 동적 할당 메모리의 실제 사용에 관한 통계 정보를 수집하기 위해
      • 기본 제공 new, delete에서는 할당 방식, 처리 방식 등을 쉽게 파악할 수 없다.
      • 이 것을 쉽게 파악하고 관리하기 위해 new, delete를 만든다.

     

    그러나 새로 new, delete를 구현했을 때 통상적으로 쓰이는 관례를 제쳐두더라도 바이트 정렬을 맞춰줘야 한다는 문제가 발생한다.

     

    바이트 정렬은 포인터는 4의 배수에 해당하는 주소로 맞춰야 하고 double은 8의 배수에 해당하는 주소에 맞춰야 한다는 규칙인데 이 규칙을 어기는 경우 심각하게는 프로그램이 중단될 수도 있고 조금 유연한 아키텍처라도 속도가 크게 느려지게 된다.

     

    ※ 잘 동작하는 관리자를 만들기는 어려우므로 정말 필요한 게 아니라면 굳이 만들 이유가 없다.

     

    댓글

Designed by Tistory.