2008-10-03 2 views
8

우리는 임베디드 시스템에서 Windows CE 4에서 실행되는 응용 프로그램을 개발하기 위해 C++을 사용하고 있습니다.메모리 제한이있는 임베디드 시스템에서 부스트 사용

우리의 제약 중 하나는 시작시에만 동안 응용 프로그램에서 사용되는 모든 메모리가 할당되어야한다는 것입니다. 우리는 새로운 컨테이너를 할당하는 대신 사전 할당 된 메모리만을 사용하는 많은 컨테이너와 알고리즘을 작성했습니다.

우리는 이러한 조건에서 자체 컨테이너 대신 부스트 라이브러리를 사용할 수 있다고 생각합니까?

의견 및/또는 조언을 환영합니다!

고마워,

+0

몇 가지 대답이 지적했듯이 Boost는 일반적으로 각각 별도로 사용할 수있는 많은 라이브러리 집합입니다. Boost의 어느 부분을 고려하고 있는지 지정할 수 있다면 더 유용한 답변을 얻을 수 있습니다. – jwfearn

답변

6

당신은 고정 된 크기의 정적 버퍼 할당 컨테이너에 대한 자신의 할당을 작성할 수 있습니다. 컨테이너의 사용 패턴에 따라 할당자는 포인터를 증가시키는 것만 큼 간단 할 수 있습니다 (예 : 앱 시작시 컨테이너에 물건을 한 번만 삽입하고 요소를 계속 추가/제거하지 않는 경우)

+0

제 경험상 Boost 라이브러리 중 일부는 사용자 지정 STL 스타일 할당자를 사용하고 일부는 사용하지 않습니다. 일부는 다른 API를 사용하여 사용자 정의 메모리 할당을 허용합니다. 그리고 나는 심지어 위의 모든 것을 수행하는 것으로 의심합니다. 불행히도, 나는 아직 확실한 목록을 찾지 못했습니다. – jwfearn

1

부스트가 일련의 도서관. 그들 중 일부는 템플릿 메타 프로그래밍에 중점을 둡니다. 그것들은 런타임에 메모리를 사용하지도 않습니다. 하지만 귀하의 질문에 귀하의 컨테이너를 대체하는 것 같습니다. 사용자 지정 할당자를 사용하는 것을 제외하고는 이것이 가능한지 의심 스럽습니다. 하지만 그때조차도 일반 STL 컨테이너를 사용하고 부스트를하지 않을 가능성이 가장 큽니다. Boost는 아직 TR1을 포함하지 않는 컴파일러에 대해서만 TR1 컨테이너를 제공합니다.

0

부스트를 사용하지 마십시오.

큰 라이브러리이며 기본적인 메모리 할당 요구 사항은 라이브러리 디자이너의 요구 사항과 매우 다릅니다.

사용자 정의 할당 자의 요구 사항에 따라 현재 버전의 부스트를 사용할 수있는 경우에도 새로운 버전의 부스트로 중단 될 수 있습니다.

부스트 소스 코드를 살펴 보시고 유용한 아이디어를 얻으시고 자신이 원하는 것을 구현해보십시오.

+0

Boost의 새 버전이 반드시 사용자 제공 할당자를 손상시키는 것은 아닙니다. 불행하게도, 이것은 Boost 라이브러리 중 많은 부분과 우리가 사용자 정의 할당을 위해 사용하는 API가 무엇인지에 달려 있습니다. – jwfearn

11

임베디드 시스템 용 부스트을 사용합니다. 부스트를 통해 을 선택하고을 사용하면됩니다. 모든 프로젝트에서 smart_ptrboost::bind을 사용합니다. 우리는 싼 휴대폰에 대한 소프트웨어를 작성합니다. 그리고 하드웨어에서 Windows CE를 실행할 수 있다면의 부스트가 적용될 것으로 예상됩니다. 부스트 부분에 할당이 없으므로 유용 할 수 있습니다.

귀하의 요구 사항에 따라을 선택하고 을 선택하십시오.

사용하는 것과 마찬가지로 비용을 알아야합니다.

+0

저렴한 전화기의 메모리 제한은 무엇입니까? –

+2

나는 최근에 6K RAM 및 64K 플래시가있는 MSP430 마이크로에서 부스트를 사용했습니다. 그냥 선택하고 선택하십시오. – Ted

1

용기를 부스트 용기로 교체하는 것은 좋지 않습니다. 적절한 맞춤 할당자를 만드는 작업이 그렇게 나쁘지는 않지만 '시작시 할당'규칙의 정신을 위반하게됩니다. 이 규칙의 배후에있는 생각은 일반적으로 런타임에 메모리 유형 상황을 처리 할 필요가 없다는 것을 확인하는 것입니다.시스템의 모든 부분이 나중에 메모리 부족할 가능성이 없도록, 처음 시작할 때 필요할 수있는 모든 메모리가 있는지 확인하는 것이 아이디어입니다.

사용자 정의 할당자를 사용하여 Boost 컨테이너를 사용한 경우 갑자기 컨테이너가 할당 한 풀이 비워져 '시작시 할당'규칙의 목적이 제거 될 수 있습니다.

제한된 메모리 장치의 상황에서 정적으로 할당 된 배열보다 복잡한 모든 종류의 컨테이너를 피할 수 있습니다.

0

나는 순환 버퍼, 잠금 해제 컨테이너 및 비동기 I/O를 사용하고 동적 메모리를 할당하는 대신 메모리 풀을 사용하는 것을 선호합니다.

지금까지 본 가장 큰 문제는 shared_ptr이 많은 장소에서 사용되고 있으며 intrusive_ptr으로 바꾸기가 쉽지 않다는 것입니다. shared_ptr은 참조 횟수를 추적하기 위해 동적 메모리를 할당하므로 내장 된 시스템에서 사용할 수는 없습니다. 이 문제를 해결

는 행할 보이지만, 작업 —이 많이 나는 원하는 경우 공유 포인터의 특정 유형이 intrusive_ptr으로 변경 될 수있는 shared_ptr 그래서이 포함 된 모든 클래스의 템플릿 사양을 확장해야합니다. 이제는 얼마나 많은 작업이 필요한지, 필자가 필요로하는 Boost 기능을 자신 만의 버전으로 작성하는 것이 얼마나 많은 작업인지 고려해야합니다. 즐거운 곳이 아닙니다.

누군가 내가 왜이 점을 잘못 지적하기를 바랍니다.

관련 문제