Dimensioni dinamiche degli array. perchè si e perchè no?

di il
31 risposte

31 Risposte - Pagina 3

  • Re: Dimensioni dinamiche degli array. perchè si e perchè no?

    [continuo dal post precedente]
    Quindi il push del PHP crea ogni un array statico ex-novo? Lo sai con certezza?
    No il mio intervento voleva dire che i linguaggi ad alto livello nascondono molto ai programmatori.
    Molto probabilmente quando viene creato un array di 10 elementi in realta se ne crea uno da 200 o piu poi in caso di superamento della dimensione lo si ridimensiona a 400,in modo da limitare il ridimensionamento vero e proprio,proprio come fanno quasi tutte le funzione del s.o. critiche,ad esempio quando leggi un file un carattere alla volta in realtà il s.o. legge un buffer di x caratteri e te ne restituisce uno fino a che non si svuota,solo allora torna realmente a leggere.
    Tale tecnica è usata anche per l'allocazione della memoria nell'heap,il tutto per minimizzare i tempi lunghi di accesso.
    Come altresi può essere vero che non usi reali array ma semplici linkedlist.Non lo so con certezza e non penso che sia un punto cruciale per i programmatori php.
  • Re: Dimensioni dinamiche degli array. perchè si e perchè no?

    vbextreme ha scritto:


    Diciamo che non è obbligatorio a priori che un array sia costituito in forma fisica da una sequenza di blocchi di memoria adiacenti. Se questo accade, allora ci sono facilitazioni nel calcolo della posizione in memoria dell'elemento N-esimo, quindi un suo accesso a maggiore velocità.
    Invece si,altrimenti non si parlerebbe piu di array ma di linked list.
    Perchè poi simulare un array con delle linked quando lo si può creare realmente?
    Il concetto di vettore è un concetto matematico, così come quello di matrice N dimensionale. Sono concetti non propri dell'informatica, bensì concetti che l'informatica ha preso in prestito (per così dire) dalla matematica.

    Suvvia, non poniamoci con simili rigidità mentali; un vettore può essere presentato all'utilizzatore finale come vettore, ma può essere implementato in vari modi diversi, dipende sempre dai problemi di implementazione. Così come una linked list, può essere presentata in vari modi diversi, ma dentro è sempre una linked list, con pregi e difetti.

    In relazione alla tua domanda, un vettore realizzato in modo contiguo in memoria di solito è la migliore soluzione, ma dipende tutto dal sistema hw e dalla CPU. Esistono sistemi con memoria frammentata fisicamente e quindi non contigua (memoria che sta su chip distinti e che occupa zone di indirizzamento a macchia di leopardo, tanto per fare un esempio, e CPU senza MMU), che non permetterebbero l'allocazione di vettori contigui di dimensione oltre una certa soglia. Stesso problema si potrebbe porre nel caso di un sistema (embedded ad esempio) con primitive alloc/free che alla lunga creano grande frammentazione logica dei blocchi di memoria.

    E con questo, personalmente ho chiuso sull'argomento.
Devi accedere o registrarti per scrivere nel forum
31 risposte