Vantaggi e svantaggi di puntatori

April 23

A seconda di chi si chiede, i puntatori sono sia una benedizione o una maledizione. Puntatori forniscono un meccanismo per l'accesso e la modifica degli oggetti e il codice in memoria direttamente. I puntatori sono utilizzati in molti linguaggi di programmazione per la manipolazione di stringhe di caratteri, passando parametri alle funzioni, la gestione matrici di dati, e la creazione di liste collegate e altre strutture dati complesse. Mentre i puntatori forniscono una grande flessibilità nella gestione della memoria e ottimizzare gli algoritmi, ci sono svantaggi. Imparare a utilizzare i puntatori è difficile per molti programmatori, e il debug dei problemi del puntatore è impegnativo.

Ottimizzazione

Puntatori forniscono un vantaggio prestazionale, consentendo di accedere direttamente memoria del computer. In un programma per computer, il modo più veloce per accedere e modificare un oggetto è quello di accedere direttamente alla memoria fisica in cui è memorizzato l'oggetto. Questa tecnica è comunemente utilizzato per ottimizzare algoritmi richiedono accesso frequente o ripetitivo grandi quantità di dati.

Sicurezza

L'accesso diretto alla memoria significa che è possibile fare cose che forse non si dovrebbe. A seconda della lingua, il compilatore e la piattaforma informatica, si potrebbe memoria ad accesso involontariamente (o intenzionalmente) che non è il vostro da accedere. Di conseguenza, si potrebbe sovrascrivere la memoria critica, modificare il codice di un'applicazione in esecuzione, o causare l'applicazione o un'altra applicazione di comportarsi o uscire inaspettatamente. Un errore comune è quello di eseguire oltre la fine di un array, l'accesso alla memoria oltre la fine dello spazio assegnato per tale matrice.

Gestione della memoria

Gestire l'utilizzo di memoria in un'applicazione utilizzando puntatori offre flessibilità, ma è anche un lavoro di routine. Allocare e deallocare la memoria, se necessario durante la fase di esecuzione consente di creare oggetti di grandi dimensioni, come ad esempio gli array, in modo rapido e immediatamente liberare la memoria quando non è più necessario. Tuttavia, è anche facile creare perdite di memoria riassegnando un puntatore senza liberare la memoria che stava indicando prima. Garbage Collection è la vostra responsabilità.

Parametri di funzione

Le funzioni possono restituire solo un valore, ma possono prendere più parametri. Passando in puntatori alle variabili come parametri, una funzione può essere utilizzata per impostare i valori di tali variabili, ed i nuovi valori persisterà dopo la funzione ritorna. Essendo in grado di impostare il valore di alcune variabili contemporaneamente con una singola chiamata di funzione è pulito ed efficiente. Tuttavia, può essere un po 'di confusione da leggere perché non si può dire se le variabili passate in saranno modificati o no semplicemente guardando la chiamata di funzione. Avrete bisogno di guardare la documentazione di funzione per imparare come la funzione si comporta.

puntatori a funzione

I puntatori non sono solo per gli oggetti in memoria; essi possono anche essere utilizzati per funzioni, permettendo così una funzione per essere passato come parametro a un'altra funzione. Un puntatore funzione può essere assegnato l'indirizzo di uno di una scelta di funzioni in modo che il puntatore agisce come una sorta di alias. linguaggi di programmazione orientati agli oggetti hanno eliminato la necessità di puntatori a funzione con ereditarietà e polimorfismo.

Pointer Confusione

I puntatori sono un argomento di confusione per molti programmatori, in particolare quelli con esperienza nell'uso di lingue che non dispongono di puntatori e accesso diretto alla memoria. Tuttavia, la persistenza porta rapidamente alla padronanza di puntatori. I puntatori sono spesso accompagnati da sintassi oscura. Coerentemente convenzioni di denominazione delle variabili possono aiutare il vostro codice più leggibile. Ad esempio, le convenzioni di denominazione comuni includono l'utilizzo di "p" o "PTR" come prefisso per i nomi delle variabili puntatore.

Suggerimenti

Usare sempre le funzioni di allocazione forniti dal linguaggio per la memoria di allocazione, e verificare che la memoria è stata allocata prima di utilizzarlo. Fate attenzione con la gestione della memoria, e liberare la memoria quando non è più necessario. Se si riassegna un puntatore ad un nuovo indirizzo di memoria, assicurarsi che la vecchia memoria viene liberata o assegnato ad un puntatore diverso. Assicurarsi che i puntatori creati in funzioni sono assegnate proprietà alla portata genitore o che la memoria è deallocato prima di uscire dalla funzione.