Aumenta la dimensione di un file mappato in memoria

0

Sto mantenendo un file mappato in memoria per memorizzare il mio albero come la struttura dati.

Quando aggiorno la struttura dati, ho riscontrato questo problema. Il file è limitato sulle sue dimensioni e non può essere troppo lungo o troppo piccolo.

Ho metodi come

 void mapfile_insert_record(RECORD* /* record*/);

 void mapfile_modify_record(RECORD* /* record*/);

Entrambe le operazioni potrebbero portare a superare lo spazio che è gratuito sul file di memoria.

Come posso superare questo? Quale strategia dovrei usare.

  1. calcola se è necessario superare il file come pre-condizione su entrambi metodi.
  2. Eccola dinamicamente, per esempio gestisci un timer e un file di polling costante per la sua dimensione disponibile gratuita e quindi estendere automaticamente.

Qualche idea o modello per superare questo problema?

    
posta sandun dhammika 09.12.2012 - 13:27
fonte

1 risposta

1

Il polling non è una buona idea. Avrebbe senso solo se il file viene modificato da altri processi, ma anche in questo caso è meglio estendere solo prima di inserire / modificare. Inoltre, l'accesso simultaneo è pericoloso, poiché devi preoccuparti della sincronizzazione.

Supponendo che il tuo file non venga mai ridotto, puoi memorizzare nella cache la dimensione del file, quindi devi solo controllare la dimensione del file se la tua richiesta corrente è al di fuori dell'ultima dimensione del file visto.

A proposito, descrivi la versione 2) come "Superalo dinamicamente ...". Per me, versione 1) estende anche dinamicamente il file. L'unica differenza è che 1) si estende solo su richiesta, mentre 2) si estende con entusiasmo.

A meno che non ci siano alcuni vincoli aggiuntivi che non conosciamo, raccomanderei di mantenerlo semplice e attenersi alla versione 1).

    
risposta data 01.01.2013 - 20:15
fonte

Leggi altre domande sui tag