Questa domanda ha avuto piuttosto un congelamento in SO, quindi ho deciso di cancellarlo e provare qui. Se pensi che non si adatti nemmeno qui, per favore lascia almeno un commento sul suggerimento su come trovare un esempio che sto cercando ...
Puoi dare un esempio , dove usare V99 V99 offre un vantaggio reale su qualcosa come l'attuale heap standard-utilizzando i meccanismi C ++ RAII?
L'esempio che seguo dovrebbe:
- Ottieni un vantaggio prestazionale facilmente misurabile (10% forse) rispetto all'utilizzo dell'heap.
- Non ha una buona soluzione, il che non richiederebbe affatto l'intero array.
- Beneficio di utilizzare la dimensione dinamica, invece della dimensione massima fissa.
- È improbabile che causi un overflow dello stack nello scenario di utilizzo normale.
- Sii strong abbastanza da indurre uno sviluppatore che ha bisogno di prestazioni a includere un file sorgente C99 in un progetto C ++.
Aggiungendo qualche chiarimento sul contesto: intendo VLA come inteso da C99 e non incluso nel C ++ standard: int array[n]
dove n
è una variabile. E sto cercando un esempio di caso d'uso in cui trionfa sulle alternative offerte da altri standard (C90, C ++ 11):
int array[MAXSIZE]; // C stack array with compile time constant size
int *array = calloc(n, sizeof int); // C heap array with manual free
int *array = new int[n]; // C++ heap array with manual delete
std::unique_ptr<int[]> array(new int[n]); // C++ heap array with RAII
std::vector<int> array(n); // STL container with preallocated size
Alcune idee:
- Funzioni che utilizzano vararg, che naturalmente limita il conteggio degli oggetti a qualcosa di ragionevole, ma non ha alcun limite superiore utile a livello di API.
- Funzioni ricorsive, dove lo stack inutile è indesiderabile
- Molte piccole allocazioni e rilasci, in cui l'overhead dell'heap sarebbe negativo.
- Gestione di matrici multidimensionali (come matrici di dimensioni arbitrarie), in cui le prestazioni sono fondamentali e ci si aspetta che le funzioni di piccole dimensioni siano molto accentuate.
- Dal commento: algoritmo concorrente, dove l'allocazione dell'heap ha un overhead di sincronizzazione .
Wikipedia ha un un esempio che non soddisfa i miei criteri , perché la differenza pratica nell'utilizzo dell'heap sembra irrilevante almeno senza contesto. È anche non ideale, perché senza più contesto, sembra che il conteggio delle voci possa benissimo causare overflow dello stack.
Nota: sto specificatamente dopo un codice di esempio, o suggerimento di un algoritmo che trarrebbe beneficio da questo, perché io possa implementare personalmente l'esempio.