문제

C ++를 사용하여 임베디드 시스템에서 Windows CE 4에서 실행되는 응용 프로그램을 개발하고 있습니다.

우리의 제약 중 하나는 응용 프로그램에서 사용하는 모든 메모리가 스타트 업만. 우리는 새로운 컨테이너와 알고리즘을 새로운 컨테이너와 알고리즘을 새로 할당하는 대신 Preallocated Memory 만 사용하는 많은 컨테이너와 알고리즘을 썼습니다.

이러한 조건에서 자체 컨테이너 대신 Boost 라이브러리를 사용할 수 있다고 생각하십니까?

모든 의견 및/또는 조언이 환영됩니다!

정말 감사합니다,

도움이 되었습니까?

해결책

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

다른 팁

우리는 임베디드 시스템에 부스트를 사용합니다. 부스트와 함께 할 수 있습니다 선택하고 선택하십시오 당신이 사용하는 것. 우리는 사용 smart_ptr 그리고 boost::bind 모든 프로젝트에서. 우리는 소프트웨어를 작성합니다 저렴한 휴대폰. 그리고 Windows CE가 하드웨어에서 실행할 수 있다면 부스트의 일부 적용 가능합니다. 할당이없는 부스트의 일부가 있으며 유용 할 수 있습니다.

나는 할 것이다 선택하고 선택하십시오 요구 사항에 따라.

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

컨테이너를 부스트 컨테이너로 교체하는 것은 좋은 생각이 아닙니다. 적절한 맞춤형 할당자를 만드는 작업은 그렇게 나쁘지는 않지만 '스타트 업에서 할당 된'규칙의 정신을 위반할 것입니다. 이 규칙의 배후에있는 아이디어 (내 경험에 따라)는 일반적으로 런타임에 메모리 유형 상황을 처리 할 필요가 없는지 확인하는 것입니다. 아이디어는 처음에 필요한 모든 메모리를 가지고 있는지 확인하여 시스템의 어느 부분이 나중에 메모리가 부족할 가능성이 없도록하는 것입니다.

맞춤형 할당 자와 함께 부스트 컨테이너를 사용한 경우 갑자기 컨테이너가 할당하는 풀이 비어있을 가능성을 갑자기 처리해야하므로 '시작시 할당'규칙의 목적을 제거해야합니다.

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

부스트는 라이브러리 세트입니다. 그들 중 일부는 템플릿 메타 프로 그램에 중점을 둡니다. 그것들은 런타임에 메모리를 사용하지 않습니다. 그러나 귀하의 질문은 컨테이너를 교체하는 것 같습니다. 커스텀 할당자를 사용하는 것 외에는 가능하다고 의심합니다. 그러나 그럼에도 불구하고 평범한 STL 컨테이너를 사용하고 부스트하지 않을 가능성이 높습니다. 부스트는 아직 TR1을 포함하지 않는 컴파일러에 대해 TR1 컨테이너 만 제공합니다.

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

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

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

유용한 아이디어를 위해서는 부스트 소스 코드를 자유롭게 살펴보십시오. 그러나 필요한 것을 위해 자신의 구현을 사용하십시오.

나는 지금 이것을 조사하고있다-나는 원형 버퍼, 잠금 컨테이너 및 비동기 I/O를 사용하고 싶다. 그리고 동적 메모리를 할당하는 대신 메모리 풀을 사용하는 것을 선호한다.

내가 지금까지 본 가장 큰 문제는 그 것입니다 shared_ptr 쉽게 교체 할 수있는 방법없이 많은 장소에서 사용됩니다. intrusive_ptr. 부터 shared_ptr 동적 메모리를 할당하여 참조 수를 추적하면 임베디드 시스템에서 사용할 수 없습니다.

이 문제를 해결하는 것은 가능하지만 많은 작업을 수행합니다. shared_ptr 특정 유형의 공유 포인터를 intrusive_ptr 만약 원한다면. 이제 나는 그것이 얼마나 많은 일을 할 것인지, 필요한 부스트 기능의 내 버전을 작성하는 것이 얼마나 많은 일을하는지 고려해야합니다. 즐거운 곳이 아닙니다.

누군가 내가 왜 내가 이것에 대해 틀렸는지 지적하기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top