Efficienza dei puntatori

di il
9 risposte

Efficienza dei puntatori

Salve a tutti. Sto studiando il linguaggio c, e sto leggendo vari testi che parlano dei puntatori. Ho capito il loro funzionamento, ma non capisco perché sono così efficienti.

9 Risposte

  • Re: Efficienza dei puntatori

    Beh, è la CPU che accede ai dati in memoria tramite indirizzi (ovvero puntatori), quindi è il modo più vicino alla macchina per trattare i dati.
  • Re: Efficienza dei puntatori

    Quindi è solo perché ci avviciniamo al basso livello?
  • Re: Efficienza dei puntatori

    Solo?
  • Re: Efficienza dei puntatori

    @pij87 mi sa che non hai inquadrato esattamente che cosa questo voglia dire.

    E' come dire: Einstein ha SOLO capito perche' questa stupida formuletta funziona: E = m*c^2

    Ci sono interi LIBRI che spiegano SOLO come usare i puntatori.
  • Re: Efficienza dei puntatori

    Ho letto diversi libri e materiale online ma spiega come usarli e fino a quì ci siamo. Io non ho capito per quale motivo i puntatori sono più efficienti ad esempio quando devo passare parametri ad un funzione.
  • Re: Efficienza dei puntatori

    In quel caso passare un solo indirizzo è più efficiente di passare una copia di tutti i dati, non credi?
  • Re: Efficienza dei puntatori

    Ma se devo passare due parametri: A e B, ed invece di passare gli argomenti passo due puntatori cosa cambia tra DUE argomenti e DUE puntatori.
  • Re: Efficienza dei puntatori

    In quel caso nulla, ma l'uso dei puntatori è in generale più efficiente non sempre ed in ogni caso!
  • Re: Efficienza dei puntatori

    pij87 ha scritto:


    Ma se devo passare due parametri: A e B, ed invece di passare gli argomenti passo due puntatori cosa cambia tra DUE argomenti e DUE puntatori.
    Dipende strettamente dal tipo dei parametri e dal compilatore. Se A e B sono banalmente due interi, non si riscontra alcuna differenza prestazionale rilevante, ma passando dei puntatori le modifiche effettuate sui parametri nella funzione richiamata si propagano all'indietro al chiamante e questo consente di superare i limiti sintattici che impongono un unico valore restituito. L'unico metodo prestazionalmente superiore a questo, per la creazione di funzioni polidrome ossia con più di un valore restituito, è l'uso di variabili condivise con scope a livello di modulo o superiore (extern), che però risulta deprecato da molte norme di stile in quanto viola il criterio di information hiding di Parnas.

    Se A e B, viceversa, sono complesse strutture user defined e tu le passi direttamente ad una funzione invece di usare i relativi puntatori, puoi essere bocciato all'esame e sarai sicuramente estromesso da qualsiasi colloquio di lavoro minimamente serio, poiché la differenza in termini di footprint sullo stack frame è abissale.

    Se A e B sono due array, la questione non si pone minimamente e il compilatore passerà sempre e comunque un puntatore costante (immutabile) al primo elemento dell'array. Non esiste passaggio per valore di array in C.

    Discorso diverso è quello dell'aggregazione dei parametri: se l'idea peggiore è quella di passare un numero elevato di singoli parametri ad una funzione, la migliore dal punto di vista dell'engineering è quella di passare un puntatore ad una struttura (caso limite, un array) che contiene tutti i valori sui quali la funzione può operare. Di nuovo, l'unico metodo da preferire a questo quando le prestazioni assolute sono la priorità principale è l'uso di una struttura condivisa, accessibile ortogonalmente da qualsiasi funzione.
Devi accedere o registrarti per scrivere nel forum
9 risposte