Domanda

Ho un (potenzialmente stupida) domanda su C++ STL.Quando faccio un contenitore (vettore, set, mappa, ecc), è allocata sullo stack o sul mucchio?Se faccio un set e mettere 5 milioni di stringhe, vi devo preoccupare di un overflow dello stack?

È stato utile?

Soluzione

Classi STL per impostazione predefinita allocazione del buffer interno dal mucchio, anche se queste classi, inoltre, che consentono di personalizzare i contatori che consentono all'utente di specificare un percorso alternativo per allocare - ad es.una memoria condivisa piscina.

Altri suggerimenti

L'impostazione predefinita allocatore per contenitori STL utilizza l'operatore new e delete, quindi qualunque sia quelle rotta per il tipo di contenuti.(In generale, si tratta dal mucchio a meno che non fai qualcosa di ignorare che.)

Non sarà possibile ottenere un overflow dello stack dall'assegnazione di 5 milioni di stringhe.Anche se hai fatto una pila a base di allocatore, sarebbe probabilmente overflow prima ancora inserito una stringa.

Il contenitore stesso è allocato in cui si decide (può essere lo stack, heap, un membro dell'oggetto, ecc) ma la memoria che utilizza, per impostazione predefinita, come altri hanno descritto, preso in Negozio (gestiti per il tramite di new e delete) che non è la stessa come l'heap (gestito tramite malloc/free).

Non mescolare i due!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top