2010-10-13 8 views
14

Io alla ricerca di qualche (custom) gestori di memoria/allocatore scritto in C e passato attraverso alcuni articoli, -Allocatore/gestore di memoria personalizzato in C? quale approccio?

Alcuni vicini:

devo sandbox una piccola web-server utilizzando qualsiasi uno a disposizione e non ho alcun problema nella scrittura di involucri per lo schema di manipolazione del filo/assegnazione. Apache WS utilizza i pool di memoria per la gestione della memoria e i pool non sono persistenti, è per ogni richiesta. Ragazzi, potete suggerire qualcosa? Qualche buon/migliore approccio a questo problema? I miei requisiti sono come sotto; -

  1. (Bounded tempo di risposta) assegnazione e de-allocazione deve essere conosciuta in anticipo, cioè alcuni costante costo O (c), dove c è costante.

  2. frammentazione dai formati allocazione/deallocazione eterogenee o sequenze devono essere maneggiati, posso scrivere lo schema/involucro fornire stesso.

Apprezzo davvero il tuo aiuto e le tue idee!

+0

Sto cercando qualcosa di simile e ho controllato il sito Web di IBM, ma quello che mostrano come 'malloc_init' è per unix e la libreria inclusa non è in Windows. Sto cercando in particolare una funzione da usare invece 'sbrk()' - trovare l'ultimo indirizzo valido dal sistema operativo. – frank17

risposta

2

frammentazione dai formati allocazione/deallocazione eterogenee o sequenze devono essere maneggiati, posso scrivere lo schema/involucro fornire stesso.

Per evitare la frammentazione, è necessario utilizzare una strategia di allocazione dei blocchi ibrida. L'ibrido qui significa blocchi di elementi di dimensioni diverse rispetto ai blocchi di elementi di dimensioni singole, vale a dire che l'allocatore (o un wrapper attorno ad esso) deve mantenere blocchi di elementi di dimensioni diverse (piccoli, medi e grandi ecc.). Tutte le richieste di allocazione devono essere arrotondate al limite di blocco più vicino. Questa strategia deve garantire che non si soffra di frammentazione esterna, ma può causare una frammentazione interna. È possibile trovare maggiori informazioni ai seguenti link:

http://www.cotsjournalonline.com/magazine/articles/view/101217/pg:2 http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

1

Giusto per aggiungere un altro per la vostra lista

Google Performance Tools

Migliora significativamente le prestazioni di allocazione della memoria e dispone di CPU e profiler di memoria. La loro implementazione Thread-Caching Malloc è pensata per essere abbastanza efficiente per le applicazioni multithread.

+0

Grazie! Sembra molto buono Ma un dubbio, potrei sbagliarmi, perché la raccolta dei rifiuti, diventerà non in tempo reale, voglio dire non avere "tempo di risposta limitato"? – yadab