Libft

woojikim·2021년 1월 4일
1

Libft

목록 보기
1/1

1. 목차

  1. 목차
  2. 사용된 library 함수들에 관한 내용 정리
  3. ~~어려웠던 부분~~

2. 사용된 library 함수들에 관한 내용 정리

** 1) write **

  • 함수 원형 : ssize_t write(int fd, const void *buf, size_t nbytes);
  • 반환 값
    ➔ 성공 시 : 출력한 byte 수
    ➔ 실패 시 : -1
  • 함수 인자
    ➔ fd : file descriptor*
    open(2), creat(2), socket(2), accept(2) 등을 통하여 정상적으로 open한 file descriptor
    ➔ buf : 전송할 데이터를 가지고 있는 버퍼의 pointer
    ➔ nbytes : 전송할 데이터의 byte 수

** 2) malloc **

  • 함수 원형 : void *malloc(size_t _Size);
  • 반환 값
    ➔ 성공 시 : 할당한 메모리의 첫번째 주소
    ➔ 실패 시 : NULL
  • 함수 인자
    ➔ size : 할당할 메모리의 byte 수
  • 동적 할당
    ➔ 의미 : 프로그램의 동작 중에 메모리를 할당하는 것
    ➔ 동적으로 메모리를 할당할 때는 Heap 영역*에 메모리 할당
    ➔ 동적으로 할당된 메모리는 반드시 free 해야한다. 그렇지 않으면, memory leaks 발생

** 3) free **

  • 함수 원형 : void free(void *ptr);

  • 반환 값
    ➔ NULL

  • 함수 인자
    ➔ malloc, calloc, realloc 등으로 할당된 메모리 주소

** 2-1. 관련 내용 정리**

** 1) File descriptor **

  • 개념 : Linux 혹은 Unix 계열의 시스템에서 process가 file(디렉토리, 소켓, 파이프 등)을 다룰 때 사용하는 개념으로, 특정 파일에 접근할 때 사용되는 추상적인 값이다.
    (일반적으로 0이 아닌 정수값을 갖는다.)
  • 할당 방법
    ➔ 해당 process의 file descriptor number 중 사용되지 않은 가장 작은 값을 할당
    ➔ 기본적으로 할당되는 file descriptor는 standard input(0), standard output(1), standard error(2)

** 2) 메모리 구조 **

  • 프로그램 실행 시, 운영체제는 메모리 공간을 할당해준다.
  • 메모리 공간은 ** 스택(Stack)*, 힙(Heap)*, 데이터(Data)*, 코드(Code)* **영역으로 구분된다.

할당 시기 : program이 실행될 때
할당 장소 : RAM
할당 용도 : program 작동 시 필요한 메모리 공간(지역변수, 전역변수 등)

** 3) Stack 영역**

  • 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 메모리 영역
  • 함수가 종료 시 해제
  • push를 통해 데이터를 저장하고, pop을 통해 데이터를 인출
  • LIFO방식에 따라 동작하며, 메모리의 높은 주소에서 낮은 주소의 방향으로 할당
  • stack overflow
    ➔ 함수의 재귀 호출이 무한히 반복되면, 재귀 호출에 의한 스택프레임이 계속해서 쌓임
    ➔ 스택의 모든 공간을 다 차지하고 난 후 더 이상의 여유 공간이 없을 때 다시 스택 프레임을 저장하게 될 시 발생
    ➔ 오동작 혹은 보안 취약점의 문제로 강제종료

** 4) Heap 영역**

  • 동적으로 메모리를 할당할 때 사용되는 메모리 영역
  • free 시 해제
  • 힙 영역이 필요한 이유 : 사용자의 요구에 맞게 메모리를 할당(런타임 동안에 메모리의 크기 결정)해주기 위해서
  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당

5) 데이터 영역

  • 전역 변수 및 static 변수가 할당되는 영역(프로그램의 시작과 동시에 할당)
  • 프로그램 종료 시 해제

6) 코드 영역

  • 실행할 프로그램의 코드가 저장되는 영역
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리
profile
programmer

0개의 댓글