부스트 기능을 사용할 때 앱 크기는 약 0.1 ~ 0.3MB 정도 증가하는 경향이 있습니다. 이것은별로 좋아 보이지 않을 수도 있지만, 다른 외부 라이브러리를 사용하는 것과 비교하면 (적어도 나를 위해). 왜 이런거야?왜 부스트를 사용하면 파일 크기가 너무 커지나요?
답변
부스트는 템플릿 을 사용합니다.. 이러한 템플릿은 동일한 매개 변수를 사용하여 여러 번 인스턴스화 할 수 있습니다. 충분히 똑똑한 링커는 하나의 복사본을 제외한 모든 것을 버릴 것입니다. 그러나 모든 링커가 충분히 똑똑하지는 않습니다. 또한 템플릿은 때때로 암시 적으로 인스턴스화되며 인스턴스화 된 횟수를 알기조차 어렵습니다.
"모든 링커가 충분히 똑똑하지는 않습니다". 같은 코드의 "여러 사본"을 남기지 못하는 것처럼 벙어리는 "인라인"이라고도합니다. 하지만 템플릿은 정적 라이브러리보다 인라인하기가 쉽습니다. 코드 크기를 늘리지 않고 인라인 만 옵션을 설정하지 않으면 코드 크기가 커집니다. 중복 된 라인 외부 코드와 같이 직선적 인 비효율적 인 경우도 있습니다. –
각 헤더를 참조하는 모든 단일 obj 파일에도 복사본이 생성됩니다. 이러한 템플릿의 대부분은 다른 템플릿 위에 구현되므로 각 템플릿을 여러 템플릿의 수만큼 다중화합니다. 커다란 프로젝트에서 수만개의 cout 템플릿 만 쉽게 얻을 수 있습니다. 그리고 stl과 boost가 구현되는 방식으로, 코드는 어쨌든 대단히 부풀려집니다. 플렉스 mem 조각화 및 최적화 살인은 너무 많은 func ptrs 및 smt ptrs가 있기 때문에 미친 듯이 발생합니다. 간단히 말해서, boost를 전혀 사용하지 말고 stl을되도록 적게 사용하십시오. –
@Charles : 절대적으로 끔찍한 일반적인 조언. 특별히 심각하지 않은 코드 크기를 줄이려는 것이 아니라면 가능한 한 많이 사용해야합니다. – GManNickG
모두 사용 방법에 따라 다릅니다. Boost는 많은 템플릿이기 때문에, 사용되는 타입마다 많은 멤버 함수가 컴파일됩니다. n 유형의 부스트를 사용하는 경우 멤버 함수는 (C++ 템플릿으로) n 번 (각 유형마다 하나씩) 정의됩니다.
"너무 많이"는 비교 용어입니다. 사과를 오렌지와 비교하고 있습니다. 다른 라이브러리가 작기 만하다면 Boost가 작은 것으로 가정해야한다는 것을 의미하지는 않습니다. 엄청난 양의 일을보세요. 부스트가 당신을 위해 해줍니다!
동일한 기능을 가진 사용자 지정 라이브러리를 만드는 것이 더 적은 크기 일 것입니다. 유일하게 유효한 비교는 "X를하는 Boost의 라이브러리"대 "X를하는 또 다른 라이브러리"입니다. "X를하는 Boost의 라이브러리"와 "Y를하는 또 다른 라이브러리"가 아닙니다.
파일 시스템 라이브러리는 매우 강력합니다.이 라이브러리는 많은 기능을 갖추고 있으며, 간단한 인터페이스를 제공하기위한 백본 코드가 많이 있습니다. 또한, 언급 된 다른 템플릿과 마찬가지로 일반적으로 코드 크기를 늘릴 수 있지만 피할 수있는 방법은 아닙니다. 템플리트 또는 직접 코드화 된 경우, 둘 중 하나가 동일한 크기 코드가됩니다. 유일한 차이점은 템플릿이 훨씬 쉽습니다.
부스트는 주로 매우 일반화되고 때로는 매우 복잡한 템플릿으로 구성됩니다. 즉, 형식 및 함수는 선언에 의해서가 아니라 사용법에 따라 컴파일러에서 만들어집니다. 즉, 소량의 소스 코드는 선언되거나 사용 된 템플릿의 모든 변형을 수행하기 위해 상당량의 오브젝트 코드를 생성 할 수 있습니다. 또한 Boost는 표준 라이브러리에 의존하며, 이러한 종속성도 끌어들입니다. 그러나 가장 중요한 기여는 Boost 소스 코드가 거의 주로 포함 파일에 있다는 사실입니다. 표준 c 포함 파일 (STL 외부)을 포함하면 일반적으로 소스 코드가 거의 포함되지 않으며 구현이없는 대부분 프로토 타입, 작은 매크로 또는 형식 선언이 포함됩니다. Boost는 include 파일에서 대부분의 구현을 포함합니다.
내 경험에 비추어 볼 때 Boost를 사용해야하는 경우 속성과 같은 더 많은 고유 기능을 제공하는 다른 언어를 사용해야 할 수도 있습니다. Boost는 때로는 빌드 - 프로젝트의 시간. – Jordan
- 1. 왜 내 페이지의 크기가 Wikipedia와 비교하여 커지나요?
- 2. 런타임 중에 스택 크기가 커지나요?
- 3. extjs 파일 크기가 너무 커야합니다.
- 4. 크기가 너무 큰
- 5. javascript 파일의 크기가 너무 큽니다.
- 6. C# 왜 이미지 크기가 커지면 파일 크기가 커야합니까?
- 7. PHP 스크립트 : 크기가 너무 큽니까?
- 8. SSIS 패키지의 크기가 너무 큽니까?
- 9. swf 파일의 크기가 너무 큽니다.
- 10. Opera에서 글꼴 크기가 너무 크다.
- 11. OS X의 글꼴 크기가 너무 크다
- 12. Py2App : 파일을 포함해야하지만 크기가 너무 크다
- 13. GWT DockLayoutPanel에서 대화 상자 크기가 너무 작습니까?
- 14. RSS 피드 XML 파일의 크기가 너무 큽니까?
- 15. 왜 HeapOverflow 프로그램의 크기가 5MB입니까?
- 16. 왜 CSC.EXE 대 Devenv를 사용할 때 출력 파일 크기가 다른가요?
- 17. Android 에뮬레이터 화면 크기가 너무 큼
- 18. 위젯 크기가 너무 큰 선형 레이아웃
- 19. 웹 페이지의 힙 크기가 너무 큽니까?
- 20. 다각형 교차가 실패합니다. 크기가 너무 큽니다.
- 21. HTML : 글꼴 크기가 너무 큽니다 - 이유가 무엇입니까?
- 22. 컨트롤이 너무 커서 QtDesigner에서 크기가 조정되지 않습니다.
- 23. Android : AndEngine - AnimatedSprite 텍스처 크기가 너무 큽니까?
- 24. iPhone 4 글꼴 크기가 너무 크다
- 25. 문자열에서 파일 크기가
- 26. 왜 내 SWF 파일이 너무 큽니까?
- 27. 왜 프로그래밍 언어가 너무 많습니까?
- 28. (왜) 리플렉션이 .NET에서 너무 비쌉니까?
- 29. 왜 버퍼 크기가 스트림 출력을 변경합니까?
- 30. 스레딩에 NSOperation을 사용하면 너무 많은 객체가 생성됩니다.
부스트의 어느 부분입니까? – GManNickG
현재 파일 시스템, lexical_cast, random 및 bind를 사용 중입니다. – Anonymous
너무 빨리 답변을 수락하지 마십시오. 어떤 사람들은 질문조차하지 못했습니다. 이것은 dsimcha에게 아무런 위법이 아닙니다. 다른 사람들에게 기회를주십시오. :) – GManNickG