Pergunta

Eu tenho uma pergunta (potencialmente idiota) sobre o STL C++.Quando faço um container (vetor, conjunto, mapa, etc), ele é alocado na pilha ou no heap?Se eu fizer um set e colocar 5 milhões de strings, terei que me preocupar com stack overflow?

Foi útil?

Solução

As classes STL, por padrão, alocam seus buffers internos do heap, embora essas classes também permitam alocadores personalizados que permitem ao usuário especificar um local alternativo para alocar - por exemplo.um conjunto de memória compartilhada.

Outras dicas

O alocador padrão para contêineres STL usa o operador new e delete, portanto, é qualquer rota para o tipo que está sendo contido.(Em geral, vem do heap, a menos que você faça algo para substituir isso.)

Você não obterá um estouro de pilha ao alocar 5 milhões de strings.Mesmo se você fizesse um alocador baseado em pilha, ele provavelmente iria estourar antes mesmo de você inserir uma string.

O contêiner em si é alocado onde você decidir (pode ser a pilha, o heap, o membro de um objeto, etc.), mas a memória que ele usa é, por padrão, como outros descritos, obtida no Free Store (gerenciada por meio de new e delete) que não é o mesmo que o heap (gerenciado por malloc/free).

Não misture os dois!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top