본문 바로가기

캐시 메모리에 대해 본문

C++

캐시 메모리에 대해

니렙에잠이오냐 2019. 6. 5. 15:00

최근 캐시 메모리에 대해 공부를 하고 있는데 지금까지 잘못된 코딩 습관에 대해 돌아보는 계기가 되었습니다. 

 

우선 캐시 메모리란 cpu의 처리속도와 주기억장치의 접근 속도 차이를 줄이기 위해 사용하는 고속 buffer memory라고 설명이 되어 있습니다. 

 

캐시 메모리의 특징은 다음과 같습니다.

  • 캐시는 주기억장치와 cpu사시에 위치하며, 자주 사용하는 프로그램과 데이터를 기억합니다. 
  • 캐시 메모리는 메모리 계층 구조에서 가장 빠른 소지자이며, 처리속도가 거의 cpu의 속도와 비슷할 정도의 속도를 가지고 있습니다. 
  • 캐시메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상됩니다. 
  • 캐시 주소표는 검색시간을 단축시키기 위해 주로 연관기억장치를 사용합니다. 
  • 캐시의 크기는 보통 수십kByte~수백kByte입니다. 

공무원이 어떤 자료를 가져와야 하는데 왠지 그 자료에 관련된 근처에 있는 다른 자료들도 쓰게 될 것같으니 주변에 있는 자료까지 한번에 가져오는 느낌?? 정도로 예전에는 우선 이해했었습니다. 

 

아무튼 이런 엄청난 장점을 가진게 캐시 메모리인데 여기에는 주의해야 할 사항이 있습니다. 

 

  • 포인터를 쓰면, 메모리를 두번 읽기 때문에 이 과정에서 캐시가 날아가게 됩니다. (주소값이 저장된 변수에 대한 메모리, 주소값이 가르키고 있는 실질적으로 필요한 메모리) 

저의 잘못된 코딩 습관 중 하나가 여기에 연결되어 있었습니다. 어떤 클래스가 생성하고 해제하는 클래스 또는 구조체 변수 임에도 불구하고 동적할당을 통해 포인터로 관리했었습니다. 

 

이제 부터라도 조심해야 겠습니다. ㄷㄷ

 

조금 넘어가서 배열은 연속 메모리라 빠르다고 많이들 얘기하죠. 연속 메모리이기 때문에 캐싱에 유리하기 때문입니다. 때문에 특정 상황이 아니라면 연결노드로 구현되어 있는 자료구조는 안 쓰는게 좋습니다. 물론 트리나 그래프 같은 자료구조들은 탐색에 시간 복잡도가 월등해서 예외라고 생각합니다. 

'C++' 카테고리의 다른 글

MYSQL 연습 - 2(INSERT, SELECT, UPDATE, DELETE)  (0) 2019.06.08
MYSQL 연습 - 1(MYSQL 기본 연동)  (0) 2019.06.07
lambda(람다)  (2) 2019.04.04
해쉬 테이블(HashTable)  (0) 2019.04.04
C++ 키워드 : final, explicit  (0) 2019.04.03
Comments