2013-08-22 6 views

risposta

2

Bene, sì!

Ho avuto problemi di prestazioni orribili con malloc/free in Linux e ho iniziato a cercare un sostituto. Due opzioni mi sono venute in mente tbbmalloc (parte di Intel TBB che è gratuito BTW) e Google malloc. Dopo numerosi test non era chiaro quale fosse più veloce (dei due), ma entrambi erano significativamente più veloci dell'implementazione di LIBC.

Sono andato con tbbmalloc dal momento che funzionava più agevolmente, google malloc aveva un bug che causava la memoria virtuale di essere molto grande (riservata ma non impegnata), il che era molto brutto per la mia app (i demoni IT lo avrebbero ucciso).

La buona:

  • prestazioni molto migliori rispetto malloc di libc. Era 3x-300x nell'app pesante STL.
  • Integrazione semplice. Nessun cambio di codice. Aggiungi/modifica 1 riga il makefile dell'eseguibile. Nessun cambiamento a SO.

Il cattivo:

  • pedine Mem non lo faranno con le sostituzioni. per memchk/valgrind/ecc. ripristinare il malloc originale.
  • L'app impiega il 10-30% di memoria in più.

L'app che ho sviluppato era un'applicazione CAD che utilizzava 10s di GB, costruendo e distruggendo decine di milioni di strutture diverse (molte mappe STL, vettori, hash_maps).

Come fare questo:

Nel comando linker, aggiungi -ltbbmalloc e assicurarsi che la biblioteca è nel percorso di ricerca lib (-L bandiera).

Problemi correlati