c++ 재배포 패키지를 설치해야 하는 이유?

조회수 3628회

c++ 로 개발된 프로그램을 돌리다보면 런타임 패키지를 요구 할 때가 있는데 왜 사용자 입장에서 저걸 따로 설치해야하나요? 개발자가 컴파일하는 과정에서 모든걸 프로그램에 넣어주지 못하면 그건 네이티브 언어가 아니지 않나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • C++로 그런 경험을 해 본적은 없지만, 다른 언어에서의 경험에 비추어 답변 드립니다.


    선생님과 학생이 있습니다.

    선생님이 A+B를 구현해 오라고 했고, 한 팀에서 학생1이 A를 구현하고 학생2가 B를 구현하기로 했습니다.

    지금 말씀하시는건

    학생1 입장에서 만들어서 내기만 하면 학생2 코드는 알아서 가져다가 평가해 줘야 하는거 아닌가요?

    와 비스무리 합니다.

    컴파일러가 그렇게까지 친절하지 않아요. 컴파일러 입장에서 다른 런타임 패키지는 그냥 학생2가 짠 코드일 뿐입니다. 당연히 학생2의 코드까지 묶어서 제출해야 하는거고, 그 과정이 패키지를 설치하는 과정입니다

    패키지 관리하는게 귀찮기는 하져. 그래서 패키지를 관리해 주는 다양한 툴을 활용합니다. C++에서는 어떤 방법이 있는지까지는 모르겠네요.

  • 윈도우라는 가정하에 조금 더 보충합니다.

    크게 라이브러리는 static 타입과 dynamic 타입 두종류가 있습니다.

    여기서 static 타입은 lib 혹은 a확장자로 되어 있으며 컴파일할 때 전부 합쳐서 하나의 큰 파일을 만들어 냅니다.

    dynamic 타입은 dll 혹은 so 확장자로 되어 있으며 동적으로 라이브러리를 호출하여 사용합니다.

    런타임 라이브러리. 즉 구동을 위한 공통 라이브러리라고 생각하면 됩니다. mfc 기반의 프로그램등에서 공통사용하는 라이브러리로 공통이므로 dll로 배포하고 동적으로 로딩하는 형태를 취합니다.

    그 런타임 라이브러리는 공통 라이브러리이므로 모든 실행파일은 로드를 해야합니다. 그런 라이브러리를 static 으로 만들어 버리면 모든 실행파일에는 같은 라이브러리를 다 가지고 있다는 의미가 됩니다.

    첫째. 유지보수가 나쁩니다. 공통 라이브러리에 버그가 발견되었습니다. static 타입이었다면 패치하기 위해 다시 컴파일해야 합니다. 그러나 런타임 라이브러리라면 라이브러리만 업데이트하면 됩니다.

    둘째. 메모리 낭비가 됩니다. dll 의 경우 메모리에 한번만 commit 됩니다. 두개의 실행파일에서 같은 dll을 사용한다면 가상메모리 공간에 dll 메모리 공간만 맵핑됩니다.

    dynamic 이라면 한번만 점유하지만 static 이라면 각각 메모리를 점유하게 됩니다.

    셋째. 디스크 낭비가 됩니다.
    static이면 하나의 파일에 전부 추가되므로 당연히 사이즈가 커집니다. 10개의 프로그램에서 같은 라이브러리를 사용한다면 그만큼 낭비가 됩니다.

    물론 단점도 있는데 dll hell 이라고 부르는 라이브러리 충돌문제나 static 이 dynamic 보다는 더 빠릅니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)