728x90
반응형

전체 글 264

[malloc-lab] 동적 메모리 할당 / 명시적 가용 리스트 방식 구현 (C언어)

명시적 가용 리스트(Explicit Free lists)- 묵시적 가용 리스트는 할당 시간이 전체 힙 블록의 수에 비례하기 때문에 범용 할당기로는 적합하지 않음- 명시적 가용 리스트는 가용 블록만을 위한 연결 리스트를 만들어 활용한다.- free 블록 안에 predecessor, successor를 넣어서 앞/뒤 미할당 블록을 가리키게 하여 구현할 수 있다. LIFO(Last In First Out) 정책을 사용하여 구현한다.- 할당 해제되어 새롭게 생긴 free 블록을, 리스트의 앞 부분에 삽입하여 Stack처럼 후입선출이 이루어지도록 한다.- free_listp는 항상 리스트의 가장 앞 부분(삽입되는 부분이자 가장 먼저 탐색되는 부분)을 가리키고 있다. - LIFO + first fit 정책을 사용하..

[malloc-lab] 동적 메모리 할당 / 묵시적 가용 리스트 방식 구현 (C언어)

동적 메모리 할당의 개념과 묵시적 가용 리스트 방식에 대한 자세한 설명은 이전 글에 있다.https://yskisking.tistory.com/221  기본 상수 및 매크로 정의 묵시적 가용 리스트 조작을 위한, 기본 상수 및 매크로에 대한 정의 #define WSIZE 4- 기본 워드 사이즈 설정#define DSIZE 8- 기본 더블워드 사이즈 설정#define CHUNKSIZE (1- 초기 가용 블록 크기이며, 일반적으로 힙 확장시에도 CHUNKSIZE 단위로 확장된다. (2의12승, 4096byte, 4KB) #define PACK(size, alloc) ((size) | (alloc))- (할당할 크기, 1or0) 입력하면 할당할 크기의 맨 마지막 자리가 0 또는 1로 설정되어 반환된다. ( 즉..

[malloc-lab] 동적 메모리 할당의 개념 / 묵시적 가용 리스트 방식

동적 메모리 할당- heap 영역에서 이루어진다.- heap은 위쪽으로(높은 주소 방향으로) 성장한다.- heap의 top(높은 주소 쪽)을 가리키는 변수는 “brk”이며 break로 발음한다.- 할당기는 힙을 다양한 크기의 블록들의 집합으로 관리한다.- 각 블록은 할당된 블록과, 가용된 가상메모리의 연속적인 묶음이다. 명시적 할당기 - malloc- malloc을 호출해서 메모리 블록을 할당한다.- free를 호출해서 메모리 블록을 반환한다. 묵시적 할당기 - garbage collector- 할당된 블록이 언제 반환되어야 하는지 할당기가 알고 있다- 사용되지 않는 블록을 자동으로 반환하는 작업을 “garbage collection" 이라고 부른다.- List, ML, Java 같은 언어들은 garba..

[Baekjoon 26085 / Java / 실버1] 효구와 호규 (Easy)

배열은 N*M 크기이며 0 또는 1 카드로 가득 차 있다.1 . 특정 카드의 인접한 카드가 같다면, 특정 카드와 인접한 카드를 지울 수 있다. (2개만 지운다)2. 지워진 공간을 이용해 카드를 이동시킬 수 있다.3. 1,2번에 대한 횟수 제한은 없다.위 규칙을 기반으로 배열이 주어지면, 모든 카드를 지울 수 있는지를 출력하는 문제이다. 2번 규칙이 좀 까다롭게 느껴질 수 있는데, 굳이 카드를 이동시키는 로직을 짤 필요가 없다.왜냐하면, 배열에 빈 공간이 2개 있다면 이미 모든 요소를 뒤섞을 수 있기 때문이다.이동 횟수 제한이 없고, 결국 전부 지울 수 있는지만 출력하면 되기 때문에 문제는 간단해진다. 즉, 단 한번이라도 카드가 지워진다면(2개의 카드가 지워지면) 모든 카드는 지워질 수 있는 것이다. im..

Algorithm/Ad-hoc 2024.05.01

[크래프톤 정글 5기] week06 malloc-lab 주차 여섯번째 날, 페이징/세그먼테이션, DMA

페이징과 세그먼테이션세그먼테이션(Segmentation)- 메모리를 “세그먼트”단위로 나누는 방법- 각 세그먼트는 시작 길이와 주소를 가지며, 다른 유형의 데이터(코드, 데이터, 스택 등)을 위해 사용됨- 메모리를 유연하게 관리할 수 있게 하며, 프로그램의 논리적 구조를 반영함 페이징(Paging)- 메모리를 동일한 크기의 블록인 “페이지”로 나누는 방법- 각 페이지는 가상 메모리 주소와 매핑되고, 페이지 테이블을 통해 물리적 메모리 주소로 변환됨- 메모리 관리를 단순화시키고 낭비를 줄이며, 프로그램 간 메모리 충돌을 방지함 세그먼테이션 : 장점- 메모리를 논리적 단위로 나눠, 프로그램 구조를 반영한다.- 세그먼트별 보호/공유가 용이하다.세그먼테이션 : 단점- 외부 단편화 발생 가능성- 메모리 관리가 복..

[Baekjoon 24460 / Java / 실버3] 특별상이라도 받고 싶어

분할 정복 문제이다. N * N 형태의 좌석과 추첨번호가 주어진다.여기서 N은 2의 0승 ~ 2의 10승 중 하나이고, 따라서 정사각형 형태이며 4등분으로 분할이 가능하다. 특별상은 딱 한명만 받을 수 있다.사람이 1명밖에 없다면 그 사람이 수상한다.사람이 4명이라면(N : 2) 4명 중 추첨번호가 2번째로 작은 사람이 수상한다.사람이 16명(N : 4) 이상이라면, 각 구역에 사람이 4명만 남을 때까지 4등분한 후, 각 구역마다 2번째로 작은 사람을 가려내고, 그렇게 추려진 사람들 중에서 또 2번째로 작은 사람을 가려내고.. 하는 형태로 진행한다.  위 그림에선 왼쪽 위 : 1 , 오른쪽 위 : 3, 왼쪽 아래 : 5, 오른쪽 아래 : 7 이다.이렇게 추첨된 1, 3, 5, 7 중에서 또 2번째로 작은..

[Baekjoon 10655 / Java / 실버3] 마라톤 1

import java.io.*;import java.util.*;public class 마라톤1_10655 {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));                // 체크포인트 입력받기        int N = Integer.parseInt(br.readLine());        int cp[][] = new int[N][2];        for(int i = 0; i N; i++) {            StringTokenizer st = new StringToken..

[Baekjoon 1913 / Java / 실버3] 달팽이

import java.io.*;public class 달팽이_1913 {    public static void main(String[] args) throws Exception {                StringBuilder sb = new StringBuilder();                // 입력받기        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int N = Integer.parseInt(br.readLine());        int target = Integer.parseInt(br.readLine());        // 2차원 배열 생성        int board..

[Baekjoon 15486 / python / 골드5] 퇴사2

# 1일차의 최댓값, 2일차의 최댓값, 3일차의 최댓값.. 순으로 N일차의 최댓값까지 구한다import sysinput = sys.stdin.readline#  상담 가능 일수N = int(input())# 시간과 수익을 따로 입력받는다time, point = [0 for _ in range(N + 1)], [0 for _ in range(N + 1)]for i in range(1, N + 1):    time[i], point[i] = map(int, input().split())# dp 테이블 만들고, 1일부터 로직 시작dp = [0 for _ in range(N + 1)]for i in range(1, N + 1):    # 기존에 있던 값과 전날 값을 비교해 큰 값으..

Red Black Tree의 개념과 삽입/삭제, C언어 구현

RB Tree(Red Black Tree) - 이진 탐색 트리(BST) 기반의 self balanced tree - 삽입/삭제는 BST와 동일하지만, 삽입/삭제 후 RB Tree의 5가지 속성을 만족하기 위한 재조정 작업이 필요하다. - 스스로 좌/우 서브트리의 균형을 맞춘다 - 서브트리 간 height 차이는 최대 2이다. RB Tree의 속성 5가지 1. 모든 노드는 red 혹은 black 2. 루트 노드는 black 3. 모든 nil 노드는 black nil 노드 - 존재하지 않음을 의미하는 노드 - 자녀가 없을 때 자녀를 nil 노드로 표기함 - nil노드는 값이 있는 노드와 동등하게 취급 - RB트리에서 leaf노드는 nil노드이다. 4. red의 자녀는 모두 black이다 = red는 연속적으..

728x90
반응형