Есть ли какой-либо зрелый компилятор C/С++, способный оптимизировать malloc
/free
(или new
/delete
) пара info alloca
? Другими словами, конвертировать из памяти на основе кучи в стек (только для некоторых ограниченных случаев).
Эта оптимизация может быть разрешена только для пары malloc/free, когда обе функции находятся в одной и той же функции (или даже в том же блоке {}
), и free вызывается каждый раз, когда вызывается malloc. Кроме того, давайте считать, что указатель на malloced память не сохраняется в некоторой глобальной переменной.
Итак, будет ли GCC/LLVM + clang/Intel Compiler преобразовать такой блок кода:
{
char *carray;
carray = malloc(100); // or malloc(N)
// some string-like work with carray
free(carray);
}
в
{
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)
}
Это преобразование может быть не очень полезно для каждой программы, но я думаю, что может быть какая-то специальная опция компилятора.
PS (update1) Мы можем ограничить наше обсуждение только случаями, когда компилятор знает, что malloc и free - из libc (stdlib)