적은 수의 요소에 로컬 버퍼를 사용하는 컨테이너가 있으며 요소 수가 특정 한도를 초과하는 경우에만 힙 할당을 사용합니까? 대부분의 std::string
구현과 유사합니다.스택 및 동적 할당이있는 컨테이너
배경 컨테이너는 다음 간체 문맥에서 사용
:
Foo foo; // some data
vector<HandlerPtr> tagged; // receives "tagged" items
// first pass: over all items in someList
for each(HandlerPtr h in someList)
{
h->HandleFoo(foo); // foo may become tagged or untagged here
if (foo.Tagged())
tagged.push_back(h);
}
for(auto itr=tagged.rbegin(); itr!=tagged.end(); ++itr)
{
// ...
}
이 코드 부분을 갖는다 고 호출 주파수하지만 항목 태그 것은 오히려 드문 번호 someContainer
의 항목은 일반적으로 낮지 만 바인딩되지 않습니다. 미리 할당 된 "보다 글로벌 한"버퍼를 쉽게 사용할 수 없습니다. 목표는 빈번한 할당을 피하는 것입니다.
전화 주파수
- 공통 : 어떤 항목이 태그가 없습니다된다. std :: vector is fine
- 공통 : 몇 가지 항목 중 하나만 태그가 지정됩니다. 높은 주파수 할당 내가 이
- 매우 드문 피하려고하지만, 지원되어야 발생합니다 someList는 첫 번째 패스 동안 항목의 수를 예측하지만 여전히 부족하지 성장
정적 또는 스택 할당을 사용 하시겠습니까? 스택 할당에 대한 자세한 내용은 http://stackoverflow.com/questions/354442/looking-for-c-stl-like-vector-class-but-using-stack-storage – nimrodm
@nimrodn을 참조하십시오. 나는 (고정 된 제목) 싶다. 즉 컨테이너 인스턴스 내에 저장 될 수있는 제한된 수의 요소 (추가 할당없이), 그리고 충분하지 않은 경우 힙 할당을 사용합니다. – peterchen
적어도 하나의 요소가 삽입되기 전에'std :: vector'는 메모리를 할당하지 않습니다. –