Un buffer gap, in informatica, rappresenta una struttura dati utilizzata per memorizzare lunghi vettori in modo compatto, mantenendo efficienti le operazioni di inserimento e rimozione, a condizione che queste siano eseguite intorno alla stessa posizione.

Utilizzo

modifica

I buffer gap sono specialmente comuni negli editor di testo, dove vi sono molti cambiamenti al testo o vicino alla corrente posizione del cursore. Il testo viene memorizzato in un grande buffer in due segmenti contigui, con un gap tra loro per l'inserimento del nuovo testo. Lo spostamento del cursore produce una copia del testo da un lato del gap all'altro (qualche volta la copia rimane in attesa fino alla prossima operazione di modifica del testo). L'inserimento aggiunge il nuovo testo alla fine del primo segmento. L'eliminazione incrementa la dimensione del gap.

Il vantaggio di usare un buffer gap rispetto alle più sofisticate strutture dati (tipo le liste concatenate) è che il testo è rappresentato semplicemente come due stringhe literali, quali prendono spazio extra molto piccolo e quali possono essere cercate e visualizzate molto velocemente.

Lo svantaggio è che le operazioni in differenti locazioni del testo e quelle relative al riempimento del gap (richiedendo che un nuovo gap sia creato) richiedono un'ulteriore copia di molto testo, la quale è particolarmente inefficiente per grandi file. L'uso dei buffer gap è basato sulla supposizione che questo tipo di copia si verifichi abbastanza raramente e che il suo costo possa essere ammortizzato da operazioni più comuni.

Il buffer gap è ampiamente usato nell'editor GNU Emacs.

Esempi

modifica

Sotto ci sono alcuni esempi di operazioni con i buffer gap. Il gap è rappresentato in maniera "pittoresca" dallo spazio vuoto tra le parentesi quadre. Questa rappresentazione è un po' confusionaria: in una tipica implementazione gli endpoint (punti finali) del gap sono tracciati usando dei puntatori, e il contenuto del gap viene ignorato; questo consente, per esempio, di effettuare un'eliminazione aggiustando un puntatore senza cambiare il testo nel buffer.

Stato iniziale:

This is the way [                    ]out.

L'utente inserisce del nuovo testo:

This is the way the world started [   ]out.

L'utente sposta il cursore prime di "started"; il sistema sposta "started " dal primo buffer al secondo.

This is the way the world [   ]started out.

L'utente aggiunge del testo riempiendo il gap; il sistema crea un nuovo gap:

This is the way the world as we know it [                   ]started out.

Voci correlate

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

📚 Artikel Terkait di Wikipedia

Emacs

argomento in dettaglio: Buffer gap. Il contenuto dei buffer è memorizzato come una sequenza contigua di caratteri separata da un divisore (gap), dove il punto

Gap

Provenza-Alpi-Costa Azzurra (Francia) Gap – census-designated place della contea di Lancaster, Pennsylvania (Stati Uniti d'America) Buffer gap – utilizzato nella programmazione

Lista di strutture dati

generale Tipi specifici tipi di dato primitivi Numero intero Carattere struct o Composti Numero intero Stringa Double Float Union Tagged union Buffer gap

Array dinamico

concatenato possono farlo in tempo costante. Questo svantaggio è mitigato dal buffer gap e dalla variante vettore graduato discusso nel paragrafo Varianti più

Jorge Martín

prossime settimane saranno le più importanti della mia vita", su m.gpone.com, Buffer Overflow S.r.l., 27 ottobre 2024. URL consultato il 24 novembre 2024. ^

Sea Patrol

dell'Europa dell'Est che feriscono quasi mortalmente Charge, provano ad uccidere Buffer e che sono in combutta con gli insorti e la polizia delle Samaru. La terza

Equilibrio acido-base

e determinare un aumento del pH. La SID è analoga anche al concetto di buffer base (BB), cioè la capacità tampone basica complessiva del sangue, la somma

Conky

top_right gap_x 10 gap_y 10 no_buffers no uppercase no cpu_avg_samples 2 net_avg_samples 1 override_utf8_locale yes use_spacer yes text_buffer_size 256