2008-08-28 2 views
6

C++ STL에 관한 (잠재적으로 멍청한) 질문이 있습니다. 컨테이너 (vector, set, map 등)를 만들면 스택이나 힙에 할당됩니까? 세트를 만들고 5 백만 개의 문자열을 넣으면 스택 오버플로에 대해 걱정해야합니까?C++ STL 질문 : 할당 자

답변

9

STL 클래스는 기본적으로 힙에서 내부 버퍼를 할당합니다. 이러한 클래스는 사용자가 할당 할 대체 위치를 지정할 수있는 사용자 정의 할당자를 허용합니다. 공유 메모리 풀

3

STL 컨테이너의 기본 할당자는 new 연산자와 delete 연산자를 사용하므로 포함될 유형에 대한 경로는 무엇이든 상관 없습니다. (대체로 무언가를 무시하기 전까지는 힙에서 온 것입니다.)

5 백만 개의 문자열을 할당하면 스택 오버 플로우가 발생하지 않습니다. 스택 기반 할당자를 만들었더라도 한 문자열을 삽입하기 전에 오버플로가 발생할 수 있습니다.

0

컨테이너 자체는 스택, 힙, 개체 멤버 등이 될 수 있지만 기본적으로 설명 된 다른 설명대로 사용 가능한 메모리는 무료 저장소 (관리되는 new 및 delete) (malloc/free를 통해 관리되는) 힙과 동일하지 않습니다.

Don't mix the two!