Come può il C ++ rendere possibile l'uso di classi di contenitore dinamiche anche nei sistemi embedded?

2

Come può il C ++ rendere possibile l'uso di classi di contenitore dinamiche anche nei sistemi embedded?

Informazioni di base:

Ho lavorato con i processori PIC (C) e AVR (C ++) e al momento (PIC C) sto cercando di inviare un testo (con una lunghezza indefinita) a un metodo che invia questa stringa solo con un HTTP POST (quindi deve conoscere la lunghezza in anticipo).

Problema e amp; domanda:

Su C ++ questo potrebbe essere facilmente ottenuto con una classe contenitore / array dinamico. Tuttavia, quando uso C, I (guess) sto sovrascrivendo continuamente gli indirizzi di memoria (quando uso un puntatore e poi cambio la lunghezza)?

In che modo C ++ (efficielynt?) gestisce gli array dinamici? Tutti i bit della matrice dinamica sono sparsi nella tua memoria e come li trova? O assegna segretamente memoria / blocchi di memoria?

    
posta Paul 07.04.2015 - 16:13
fonte

1 risposta

6

C ++ può farlo allo stesso modo di C. Tutto il C ++ ti offre contenitori più facili da usare che avvolgono gran parte dei dettagli di basso livello.

Ad esempio, una classe di stringhe può (e fa) contenere un blocco di memoria sullo stack per stringhe brevi, allocando solo un buffer di heap per quelle più grandi. Questo buffer è esattamente come un buffer di stringa C, se la stringa viene ridimensionata, la classe di stringa lo ridimensionerà nello stesso modo in cui lo farebbe un programmatore C allocando un nuovo buffer e copiando i vecchi dati in esso, tranne che probabilmente la classe di stringhe finirà -Allocare la dimensione del buffer per consentire l'aggiunta in futuro alla stringa. Alcune classi di stringhe conteranno la lunghezza della stringa usando strlen, altre memorizzeranno la lunghezza come una variabile membro che mantiene aggiornate.

Gli array sono gestiti allo stesso modo, ma esistono contenitori specializzati che forniscono elementi come le liste collegate.

    
risposta data 07.04.2015 - 16:19
fonte

Leggi altre domande sui tag