달력

92024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

즉, 책들이 모여있는 집합체 입니다.

 

한가지 예시로 만약 번역기 라는 라이브러리가 있다고 가정해보자

 

  • 번역기 라이브러리
    1. 번역할 문장
    2. 번역될 문장
    3. 문장 읽기
    4. 문장 해석하기
    5. 문장 변화하기
    6. 등등..

위 내용 처럼 번역기 라는 라이브러리 안에 여러가지 기능들이 존재 한다.

 

우리가 그럼 라이브러리를 가지고 해야할 것은 우리가 만들 프로그램에 번역기 라이브러리를 불러와서 사용하고 싶은 기능들을 이용 하면 된다.

 

하지만 이미 만들어져 있는 프로그램을 응용하고 제재작 하는  API 와는 성질이 다르다.

 

다음엔 API에 대해 글을 써보도록 하겠다.

 

내 맘대로 이해하기 위한 끄적.

Posted by JakeGD
|

 - 해당 변수에 대해 최적화를 하지 못하도록 제약을 건다.

 - 

Posted by JakeGD
|

스택(stack)

 - 지역 변수

 - 매개 변수

 

힙(Heap)

 - 필요에 의한 동적할당

 - 컴파일단계에서 할당되어야 할 변수를 프로그램 실행동안 결정해야할 경우.

 - 가변적으로 할당이 필요로 할때. 사용.

 

데이터(Data)

 - 전역 변수

 - Static 변수

Posted by JakeGD
|

ADT(Abstract Data Type) 추상 자료형


    • 구체적인 기능의 완성과정을 생량한 순수기능이 무엇인지 나열한 것.

예시 )
Wallet(지갑) 이라는 클래스의 추상 자료형을 정의한다고 하겠습니다.


int TakeOutMoney(Wallet * pw, int coinNum, int billNum) 

 - 첫 인자값으로 전달된 주소의 지갑에서 돈을 꺼낸다..
 - 두번째 인자값으로 꺼낼 동전 수, 세번째 인자값으로 꺼낼 지폐 수를 전달한다.
 - 반환되는 int형 함수로 꺼내고자 하는 돈의 총액이 반환 후 그만큼 차감.

void putMoney(Wallet * pw, int coinNum, int billNum)

 - 첫 인자값으로 전달된 주소의 지갑에서 돈을 넣는다.

 - 두번째 인자값으로 꺼낼 동전 수, 세번째 인자값으로 꺼낼 지폐 수를 전달한다.

 - 넣은 만큼 동전과 지폐수 증가.


Posted by JakeGD
|

메모리 풀(memory pool)


      • 고정 크기의 메모리를 할당 / 접근 / 헤제 하는 메모리 관리자



메모리를 할당 을 하게 되면 OS의 시스템 콜을 하는데 자주 콜을 하면 부하가 커 잦은 할당/ 헤제는 오버헤드를 일으킨다.

잦은 할당/헤제일수록 메모리 단편화가 일어나며 메모리가 여러 곳에 있기 때문에 처리하는 작업이 더 길어지게 된다.

이러한 문제점을 해결 하기 위해 메모리 풀이 필요합니다.


일반적으로 데이터를 할당하면 스택 메모리 영역에 할당이 되고 자동적으로 헤제가 되지만 너무 자주 일어나면 오버헤드가 되므로 new / malloc 연산자들을 이용하여 메모리에 동적할당을 해주게 됩니다.
힙에 저장된 메모리는 작성자가 직접 해제 시기를 지정할 수 있게 때문에 부하도 적고 더 용이한 관리가 가능하게 됩니다.


Posted by JakeGD
|

가비지 컬렉션(Garbage Collection)


    • 어떤 데이터를 동적으로 메모리에 할당하여 저장을 한 후 더 이상 필요하지 않을 시(즉 어떠한 변수도 해당 메모리 영역을 가르키지 않을때) 메모리를 재 사용하기 위해 해당 데이터가 저장된 메모를 탐지 하여 해제하는 기법.

    • 가비지 (Garbage)의 의미
      • 더 이상 사용하지 않는 메모리를 뜻함
    • 가비지 컬렉션(Garbage Collection)의 의미
      • 메모리를 재 사용하기 위해 가비지를 회수 하여 메모리 공간을 늘리는 것을 뜻함.

    • 장점
      • 자동적으로 사용하지 않는 메모리를 해제를 해줌.(메모리 누수에 걱정이 없다.)
    • 단점
      • 자동적으로 메모리를 해제 한다고 하나 그 시점이 정확 하지 않아. 실시간 시스템에 적합하지가 않다.
      • 헤제 작업에 비용이 들기 때문에 오버헤드가 된다.

    • 가비지 컬렉션 발생 시기
      • 메모리 영역이 충분하지 않은 상황에서 힙메모리 할당이 이루어 지면 가비지 컬렉터가 실행하며 사용하지 않은 메모리를 수거합니다.
      • 가비지 컬렉터는 가끔식 실행이 되지만 시점을 알기 어려우며 플렛폼마다 다르게 발생합니다.



가비지 컬렉터(Garbage Collector)

    • 가비지 컬렉션이 쓰레기를 수집하는 역할이라면 가비지 컬렉터는 쓰레기를 수집하는 수집기라고 보시면 됩니다.
    • 동적으로 할당된 메모리가 더이상 사용되지 않을때 가비지 컬렉터들이 탐색 -> 분리 -> 수집을 합니다.
    • 가비지 컬렉터 역시 CPU와 메모리 자원을 사용하기 때문에 메모리 할당을 자주하지 않는 편이 좋다.


코딩 작업시 가비지 컬렉션 최적화 방법.


1. 필요 이상 객체를 늘리지 않는다.

2. 객체 생성하고 삭제 하는 작업 보단 재활용 하는 수단을 찾기.

3. 복잡한 참조관계 줄이기. 관계가 복잡하면 가비지 컬렉션 이후 메모리가 살아 있을 수 있는 문제 발생.

Posted by JakeGD
|

인터프리터와 컴파일러



프로그램들을 실행하는 데에는 두 가지 방법이 있습니다.

가장 일반적인 방법은 프로그램을 컴파일 하는 것이고 다른 하나는 프로그램을 인터프리터에 통과시키는 방법 입니다.



  • 인터프리터
    • interpreter (해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 방식입니다.
    • 고급 언어로 작성된 명령어들은 한번에 한 줄씩 읽어들여서 실행하는 프로그램이다.
    • 장점
      1. 기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다.
      2. 커파일 과정은 프로그램 크기가 크면 상당한 시간이 걸리지만 인터프리터는 즉시 실행 가능
    • 단점
      1. 컴파일이 끝난 프로그램의 속도 차이는 뒤쳐진다.
      2. 프로그램이 직접 실행 되므로 실행 프로그램이 따로 생성 되진 않습니다.


  • 컴파일러
    • compiler(해석기, 번역기)는 한마디로 사람이 읽을 수 있는 프로그램 언어에서 사람이 읽을 수 없고 컴퓨터가 읽을 수 있는 기계어,어셈블리어 로 번역 해주는 번역기라고 보면된다.
    • 인터프리터와 달리 즉시 실행은 못하지만 컴파일러 이후의 실행 속도가 빠릅니다.


Posted by JakeGD
|