C'è qualche maturare C/C++, in grado di ottimizzare malloc
/free
(o new
/delete
) coppie di informazioni alloca
? In altre parole, convertire da memoria basata su heap a stack (SOLO per alcuni casi limitati).Will compilatore ottimizzare malloc/liberi o nuova/delete coppia in alloca
Questa ottimizzazione può essere consentita solo per coppia di malloc/free quando entrambe le funzioni sono nella stessa funzione (o anche nello stesso blocco di {}
) e viene chiamata ogni volta che viene chiamato malloc. Inoltre, consideriamo che il puntatore alla memoria malloced non viene salvato in alcune variabili globali.
Quindi, sarà GCC/LLVM + clang/Intel Compiler convertire tale blocco di codice:
{
char *carray;
carray = malloc(100); // or malloc(N)
// some string-like work with carray
free(carray);
}
in
{
char*carray;
carray = alloca(100); // or if(N<const1) carray=alloca(N);else carray=malloc(N)
// the same work
// nothing // or if(N>=const1) free(carray)
}
Questa conversione potrebbe non essere molto utile per ogni programma, ma penso , potrebbe esserci qualche opzione speciale per il compilatore.
PS (Update1) Siamo in grado di limitare la nostra discussione solo per i casi in cui compilatore sa che malloc e libero è da libc (stdlib)
Anno fa un uomo in lista llvm [ha detto no] (http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-July/032971.html) e altro uomo [ha detto di sì] (http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-July/033015.html) e punta a [codice effettivo] (http: //lists.cs.uiuc.edu/pipermail/llvmdev/2010-July/033017.html) – osgx
Penso che malloc non sia un elemento intrinseco. Ed è piuttosto pericoloso farlo, dal momento che il compilatore non ha informazioni sulla dimensione dello stack in fase di esecuzione. – BlueWanderer
La trasformazione non è sicura se viene chiamata qualsiasi altra funzione di cui il compilatore non può vedere la definizione e viene passato il risultato di malloc: la funzione potrebbe memorizzare il puntatore da qualche parte e quindi saltare il file libero da "longjmp' (C, di solito) o un eccezione (C++). Sospetto, tenendo presente ciò, che la trasformazione sia meno frequente di quanto immagini. – hvd