미새문지

크래프톤 정글 week05, day44 - 퀴즈, 메모리 관리 전략, 잔디심기 본문

크래프톤 정글/TIL

크래프톤 정글 week05, day44 - 퀴즈, 메모리 관리 전략, 잔디심기

문미새 2024. 2. 21. 01:29
728x90

오늘 퀴즈푸는 날이라 몇 문제 끄적인다.

페이징과 세그멘테이션 정의 및 각각의 장단점

  • 페이징
    • 메모리를 동일한 크기의 블록, 즉 ‘페이지’로 나누는 방법
    • 각 페이지는 가상 메모리 주소와 매핑되며, 페이지 테이블을 통해 메모리 주소로 변환된다.
    • 메모리 관리를 단순화하고, 메모리 낭비를 줄이며, 프로그램 간의 메모리 충돌을 방지한다.
    • 장점
      • 외부 단편화 문제를 해결함
      • 메모리 관리가 상대적으로 단순함
    • 단점
      • 내부 단편화 발생 가능성이 있다.
      • 페이지 테이블 관리에 추가적인 메모리가 필요
  • 세그멘테이션
    • 메모리를 ‘세그먼트’로 나누는 방법
    • 각 세그먼트는 시작 주소와 길이를 가지며, 다른 유형의 데이터를 위해 사용된다.
    • 메모리를 더 유연하게 관리할 수 있게 해주며, 프로그램의 논리적 구조를 반영할 수 있다.
    • 장점
      • 메모리를 논리적 단위로 나누어 프로그램의 구조를 반영함
      • 세그먼트별 보호와 공유가 용이함
    • 단점
      • 외부 단편화 발생 가능성이 있다.
      • 메모리 관리가 복잡해질 수 있다.

메모리 할당 방법으로 할당되는 순서 작성

메모리 블록이 A(10), B(50), C(25), D(30), E(40) 이렇게 있을 때 First-fit, Next-fit, Best-fit 순서

  • First-fit
    • B-C-D-A
  • Next-fit
    • B-C-D-E
  • Best-fit
    • D-C-E-A

코드의 실행결과를 작성하기

#include <stdio.h>
 int main() {
 char* str[2];
 str[0] = "hello!";
 str[1] = "jungler";

 printf("1. %s\n", str[0] + 1);
 printf("2. %s\n", (str + 1)[0] + 2);
 return 0;
 }

 

결과

  1. ello!
  2. ngler

메모리 관리 전략

단편화

  • 메모리를 비효율적으로 사용하게 되어 발생하는 문제이다.
  • 이는 메모리 공간이 작은 조각들로 나눠져서 사용되는 현상을 지칭하며, 이로 인해 전체 메모리를 효율적으로 사용하지 못하는 문제가 발생할 수 있다.
  • 단편화 종류

  • 내부 단편화
    • 할당된 메모리 공간 내부에서 일부분이 사용되지 않는 현상
    • 8바이트 메모리 안에 7바이트만 사용하게 되면 1바이트가 남게 되는데 이런 메모리 잉여 자리를 **패딩(padding)**이라고 한다
    • 내부 단편화를 해결하려면 세그멘테이션을 사용해야 한다.

  • 외부 단편화
    • 메모리 공간 중 사용되지 않는 부분들이 여러 개의 작은 조각으로 나뉘어져 있는 상태를 말한다.
    • 이로 인해 충분한 메모리 공간이 존재해도 연속적인 공간이 부족해 메모리 할당이 어려워지는 문제가 발생할 수 있다.
    • 외부 단편화를 해결하려면 페이징을 사용해야 한다.

 

메모리 할당 방법

  • First-Fit(최초 적합)
    • 메모리를 처음부터 탐색하여, 요구 사이즈보다 크거나 같은 첫 번째 빈 공간에 메모리를 할당하는 방법
    • 이 방법은 메모리를 할당하는 데 필요한 시간을 최소화하는 장점이 있지만, 메모리 끝 부분에 큰 빈 공간이 남아있을 수 있는 외부 단편화를 일으킬 수 있다.
  • ​Next-Fit(다음 적합)
    • First-Fit과 비슷하지만, 이전에 할당했던 메모리 위치의 다음부터 탐색을 시작하는 방법
    • 이 방법은 First-Fit보다 외부 단편화를 덜 일으키지만, 메모리의 앞 부분에 큰 빈 공간이 남아있을 수 있는 문제점이 있다.
  • ​Best-Fit(최적 적합)
    • 메모리를 처음부터 끝까지 탐색하여, 요구 사이즈와 가장 잘 맞는 빈 공간에 메모리를 할당하는 방법
    • 이 방법은 메모리를 효율적으로 사용할 수 있지만, 메모리를 탐색하는 시간이 오래 걸릴 수 있다.
  • ​Worst-Fit(최악 적합)
    • 메모리를 처음부터 끝까지 탐색하여, 요구 사이즈보다 가장 큰 빈 공간에 메모리를 할당하는 방법
    • 이 방법은 큰 빈 공간을 유지할 수 있지만, 많은 수의 작은 빈 공간을 생성하여 외부 단편화를 일으킬 수 있다.

 

오늘의 잔디심기

백준
21760
파이썬
실버5
야구 시즌
import sys
input = sys.stdin.readline

def Baseball_season():
    case = int(input())

    for _ in range(case):
        n, m, k, d = map(int, input().split())
        b = 2*d//(k*n*m*(m-1) + m*m*n*(n-1))
        if b:
            print(m*(m-1)*n*k*b//2 + m*m*n*(n-1)*b//2)
        else:
            print(-1)

Baseball_season()

 

 

이번 주차 malloc lab은 내일 마무리하려고 한다.

 

학습 시간 : 10 ~ 26시

728x90