오늘의 코드카타
풍선 터트리기
- 메모이제이션을 활용한 인덱스별 누적 최소값 구하기
-> 문제 풀이
오늘의 공부
학습한 강의
- NetMode, NetConnection, NetDriver
- NetRole
정리 노트
오늘의 CS
new와 malloc의 차이점은 무엇인가
- 공통점으로 메모리를 동적 할당하는 방법인데, malloc은 c에서 사용하던 메모리 동적 할당 방법이고, new는 c++에서 추가된 메모리 동적 할당 방법이다.
- new
- 생성자 자동 호출
- 자동 타입 캐스팅
- 객체의 크기가 자동으로 지정되는데, 내부 변수의 크기뿐만 아니라 객체 생성 및 초기화 과정을 거치기 때문에 추가적인 오버헤드의 크기랑 패딩만큼의 크기가 할당됨
- malloc
- 생성자가 자동으로 호출되지 않음
- 기본적으로 (void*) 타입으로 할당되서, 수동 타입 캐스팅 필요
- 메모리 할당 크기를 직접 지정해줘야 하고, 딱 맞는 크기의 메모리가 할당됨
스택과 힙의 차이점이 무엇인가 (프로세스의 메모리 영역 구조)
- 스택
- 지역 변수, 함수의 매개변수, 반환되는 주소값 등이 저장되는 영역
- LIFO(후입선출) 방식으로 높은 주소 값에서 낮은 주소 값으로 메모리 할당
- 영역 크기는 컴파일 때 결정됨
- 힙
- 사용자에 의해 동적 메모리 할당이 일어나는 영역
- 데이터의 할당 및 해제가 무작위 순서로 일어나기 때문에, 메모리 단편화가 발생할 수 있음
- 영역 크기는 런타임 때 결정됨
- 스택 오버플로우가 발생하는 이유
- 무한 재귀 호출 : 끝없이 호출하는 무한 재귀에 빠질 때 발생
- 지나치게 큰 지역 변수 : 함수 내에서 매우 큰 배열 같은 지역 변수를 선언할 경우, 변수가 스택에 할당되면서 한번에 너무 많이 차지하여 오버플로 발생 가능
- 스택 오버플로우 해결법
- 종료 조건을 명확하게 한다.
- 재귀 대신 반복문 사용
- 과도한 스택 사이즈보다는 동적 메모리 할당
- 컴파일러 옵션을 통한 스택 사이즈 조절
스택과 큐의 차이점이 무엇인가 (자료 구조)
- 스택
- LIFO(후입선출) 방식으로 동작하는 자료 구조
- 사용하는 예시 : 함수 호출 시 호출 스택, 실행 취소(Undo) 기능
- 큐
- FIFO(선입선출) 방식으로 동작하는 자료 구조
- 사용하는 예시 : 네트워크 패킷 처리
- 스택 2개로 큐 만들기
- 하나를 push 전용 스택으로 push 시에는 해당 스택에 push
- 하나를 pop 전용 스택으로 pop 시에는 해당 스택에 pop
- pop 요청 시, pop 전용 스택이 비어있으면 push 전용 스택에서 전부 pop 스택으로 옮겨야 함