목록CS (4)
로또
공통점 new, malloc() 모두 동적 할당을 위해 사용한다. 차이점 new는 연산자이고 malloc()은 라이브러리를 통해 제공되는 함수이다. new는 요청한 type의 생성자를 자동으로 호출해주는 반면, malloc()은 단순히 메모리만 할당한다. new는 동적 할당을 원하는 타입만 지정하면 크기가 자동으로 지정되지만, malloc()은 할당을 원하는 크기를 필요로 한다. 또한 return-type이 void *이기 때문에 cast 연산자의 도움을 필요로 한다. new는 할당과 동시에 초기화가 가능하지만, malloc()은 할당 이후 별도의 초기화 과정이 필요하다. 언제 malloc()을 사용하는가? void* malloc(size_t size) malloc()은 할당 이후 realloc()을 이..
작성 이유 xor 연산에 대해 잘못 알고 있음을 깨닫고 충격을 받아 정리한다. or ( | ) 둘 중 하나라도 1이면 1, 아니라면 0 식 결과 0 | 0 0 0 | 1 1 1 | 0 1 1 | 1 1 and ( & ) 모두 1이면 1, 아니라면 0 식 결과 0 & 0 0 0 & 1 0 1 & 0 0 1 & 1 1 xor ( ^ ) 두 개의 값 중 하나만이 1이면 1, 아니라면 0 식 결과 0 ^ 0 0 0 ^ 1 1 1 ^ 0 1 1 ^ 1 0 not ( ~ ) 식 결과 ~0 1 ~1 0 left-shift ( > ) bit를 우측으로 이동시키는 shift 연산, 밀림으로 인해 발생하는 빈 칸은 가장 MSB(최상위 비트)로 채워진다.
작성 이유 퀵 정렬과 병합 정렬을 비교하던 중 퀵 정렬의 장점으로 TCO를 알게 되어 정리하려고 한다. 정의 재귀 함수의 성능을 향상시키고 Stack Overflow를 방지하는 최적화 기술 Tail Call 함수의 호출이 끝난 후 현재 함수에서 추가 연산을 요구하지 않는 함수 형태이다. 어떠한 함수가 return 하기 직전에 호출되는 것을 의미한다. 아래와 같은 factorial 함수는 factorial(n-1) 함수 호출 이후에 n을 곱해주는 연산이 필요하므로 Tail Call이 아니다. int factorial(int n) { if (n == 1) return 1; return n * factorial(n - 1); } factorial 함수를 다음과 같이 수정해보자. tail_factorial(n-..
작성 이유 퀵 정렬과 병합 정렬을 비교하면서 지역성에 관련 내용이 등장해 자세히 정리해보려고 한다. 정의 컴퓨터 프로그램이 일정 기간 동안 특정한 메모리 위치 집합에 접근하는 경향 캐시 메모리 CPU의 처리 속도와 주기억장치 사이의 병목 현상을 줄이기 위해 사용되는 Memory CPU와 주기억장치 사이에 위치하여 자주 사용되는 프로세스와 데이터를 기억함으로 주기억장치에 접근하는 횟수를 줄여준다. 참조 지역성(Localify of Reference) 캐시의 용량은 주기억장치에 비해 훨씬 작아 주기억장치의 모든 데이터를 기억할 수 없다. 때문에 주기억장치의 많은 데이터 중에서 CPU가 다음에 필요로 할 데이터 정보를 담고 있을 필요가 있다. CPU가 다음에 필요로 할 데이터를 예측하는 원리가 바로 참조 지역..