예외적인 제어흐름(Exceptional Control Flow)8.1 예외상황- 하드웨어와 운영체제 의해서 구현된 예외적인 제어흐름의 한 가지의 형태- 어떤 프로세서 상태 변화(이벤트)에 대한 대응특징프로세서가 이벤트가 발생했다는 것을 감지하면, '예외 테이블'이라고 하는 점프 테이블을 통해서 이 특정 종류의 이벤트를 처리하기 위해 예외처리 핸들러로 간접 프로시저 콜을 하게 됨예외 테이블 : ISR(Interrupt Service Routine)의 집합 -> 예외 내용(정보)를 담는 테이블간접 프로시저 콜 : 직접 함수의 주소를 사용하지 않고, 포인터를 통해 호출함(객체의 실제 타입을 알지 못해도 올바른 함수를 호출할 수 있음 -> 다형성) 예외처리 종료 후 상황제어를 현..
728x90
반응형
크래프톤 정글 - TIL
링커 여러 개의 코드와 데이터를 모아서 이를 연결해 메모리에 로드될 수 있고, 실행될 수 있는 한 개의 file을 만들어 내는 역할을 수행 목적 큰 프로그램을 작성하는데 도움이 됨 위험한 프로그래밍 에러를 피할 수 있음 변수 영역 규칙이 구현되었는지 이해하는데 도움이 됨 공유 라이브러리에 대해 이해할 수 있음 컴파일러 드라이버 대부분의 컴파일 시스템은 사용자를 대신해 언어 전처리기, 컴파일러, 어셈블러, 링커 를 필요에 따라 호출하게 만들어졌음(ex. GCC 드라이버 등..) 컴파일을 모두 마친 실행 파일을 prog이라고 한다면, 쉘에 ./prog 라는 명령어를 통해 해당 파일을 실행 쉘이 운영체제 내의 로더를 호출시키고, 로더 는 실행파일 prog의 코드와 데이터를 메모리로 복사하고, 제어를 시작부분으..
1. RB tree 초기화 rbtree *new_rbtree(void) { rbtree *p = (rbtree *)calloc(1, sizeof(rbtree)); node_t *t = (node_t *)calloc(1, sizeof(node_t)); t->color = RBTREE_BLACK; p->nil = t; p->root = p->nil; return p; } 2. RB tree 후위순회하면서 삭제하기 void postOrder_delete(node_t *root, node_t *nil) { if (nil == root) return; postOrder_delete(root->left, nil); postOrder_delete(root->right, nil); free(root); } void d..
1. 달팽이는 올라가고 싶다 전진, 후진, 목표지점을 받아서 반복문을 돌리면서 목표지점을 넘는 순간을 출력하려고 했는데, 시간이 짧아 시간초과 예상 공식이 있을 것 같아서 ((목표지점 - 전진) // (전진 - 후진)) + 1 이라는 공식이 나왔음 예외사항을 처리해주면 완료 import sys input = sys.stdin.readline go, back, target = map(int, input().split()) answer = 0 if target
메모리 누수(Memory Leak) 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상 더 이상 사용하지 않는 객체들이 힙(Heap) 영역에 남아있어 불필요하게 메모리를 차지하는 상황 메모리 라이프 사이클 메모리 할당 : 변수를 선언할 때나 객체, 배열 등을 생성할 때 메모리를 할당 메모리 사용 : 할당된 메모리를 읽거나 쓰는 단계(변수에 새로운 값을 할당하거나 객체의 속성을 읽을 떄 메모리 사용) 메모리 해제 : 객체가 더 이상 필요하지 않게 되면 메모리 해제코드 예시 char *a = malloc(20); // 포인터 변수 a에 동적 메모리 할당 char *b = malloc(10); // 포인터 변수 b에 동적 메모리 할당 b = a; // b가 가지고 있던 주소값을 a에 할당 fre..
1. 큐를 이용해 순차적으로 탐색(BFS 방식?) 조건을 3가지로 구분해서 구현 자식 노드가 없는 경우 왼쪽 자식 노드만 있는 경우 오른쪽 자식 노드만 있는 경우 void levelOrderTraversal(BSTNode *root) { Queue *q = malloc(sizeof(Queue)); BSTNode *cur; q->head = NULL; q->tail = NULL; enqueue(&(q->head), &(q->tail), root); while (!isEmpty(q->head)) { cur = dequeue(&(q->head), &(q->tail)); printf("%d ", cur->item); if (cur->left == NULL && cur->right != NULL) { enqueu..
728x90
반응형