문제

C ++ STL에 대해 (잠재적으로 바보 같은) 질문이 있습니다.컨테이너 (벡터, 세트, 맵 등)를 만들 때 스택 또는 힙에 할당됩니까?세트를 만들고 5 백만 개의 문자열을 넣으면 스택 오버플로에 대해 걱정해야합니까?

도움이 되었습니까?

해결책

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

다른 팁

STL 컨테이너의 기본 할당자는 연산자 new 및 delete를 사용하므로 포함되는 유형에 대한 경로가 무엇이든 상관 없습니다.(일반적으로이를 재정의하는 작업을 수행하지 않는 한 힙에서 나옵니다.)

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

컨테이너 자체는 사용자가 결정한 위치 (스택, 힙, 개체의 멤버 등일 수 있음)에 할당되지만 기본적으로 사용되는 메모리는 다른 설명과 같이 Free Store에서 가져옵니다 (new를 통해 관리 됨).및 삭제) 힙과 동일하지 않습니다 (malloc / free를 통해 관리 됨).

두 가지를 섞지 마세요!

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