gpt4 book ai didi

c++ - 编译器会优化 malloc/free 或 new/delete 对到 alloca

转载 作者:IT老高 更新时间:2023-10-28 23:19:31 26 4
gpt4 key购买 nike

有没有成熟的C/C++编译器,能够优化malloc/free(或者new/delete) 对信息 alloca?换句话说,从基于堆的内存转换为基于堆栈的内存(仅适用于某些有限的情况)。

只有当两个函数在同一个函数中(甚至在同一 block {}中)时,才允许对malloc/free进行这种优化,并且每次malloc时都会调用free叫做。另外,让我们考虑一下指向 malloced 内存的指针没有保存在某个全局变量中。

那么,GCC/LLVM+clang/Intel 编译器是否会转换这样的代码块:

{
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) 的情况

最佳答案

有一个名为 poolalloc 的 LLVM 分支可以进行这种优化。它作为 SAFECode 的一部分进行维护,并且不在主线 LLVM 发行版中。

Chris Lattner 中有描述博士 thesisthis PLDI 纸。代码是here .

关于c++ - 编译器会优化 malloc/free 或 new/delete 对到 alloca,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com