草庐IT

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

有没有成熟的C/C++编译器,能够优化malloc/free(或者new/delete)对信息alloca?换句话说,从基于堆的内存转换为基于堆栈的内存(仅适用于某些有限的情况)。只有当两个函数在同一个函数中(甚至在同一block{}中)时,才允许对malloc/free进行这种优化,并且每次malloc时都会调用free叫做。另外,让我们考虑一下指向malloced内存的指针没有保存在某个全局变量中。那么,GCC/LLVM+clang/Intel编译器是否会转换这样的代码块:{char*carray;carray=malloc(100);//ormalloc(N)//somestri

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

有没有成熟的C/C++编译器,能够优化malloc/free(或者new/delete)对信息alloca?换句话说,从基于堆的内存转换为基于堆栈的内存(仅适用于某些有限的情况)。只有当两个函数在同一个函数中(甚至在同一block{}中)时,才允许对malloc/free进行这种优化,并且每次malloc时都会调用free叫做。另外,让我们考虑一下指向malloced内存的指针没有保存在某个全局变量中。那么,GCC/LLVM+clang/Intel编译器是否会转换这样的代码块:{char*carray;carray=malloc(100);//ormalloc(N)//somestri

c++ - 如何在预处理器中检测 -stdlib=libc++?

我认为这是Notypenamed'unique_ptr'innamespace'std'whencompilingunderLLVM/Clang问题的一部分.AccordingtoMarshallClow,我可以通过_LIBCPP_VERSION检测到-stdlib=libc++:Ifyou'rewritingcross-platformcode,sometimesyouneedtoknowwhatstandardlibraryyouareusing.Intheory,theyshouldallofferequivalentfunctionality,butthat'sjusttheo

c++ - 如何在预处理器中检测 -stdlib=libc++?

我认为这是Notypenamed'unique_ptr'innamespace'std'whencompilingunderLLVM/Clang问题的一部分.AccordingtoMarshallClow,我可以通过_LIBCPP_VERSION检测到-stdlib=libc++:Ifyou'rewritingcross-platformcode,sometimesyouneedtoknowwhatstandardlibraryyouareusing.Intheory,theyshouldallofferequivalentfunctionality,butthat'sjusttheo

c++ - 使用 clang API 打印参数的类型 (ParmVarDecl)

我需要使用clangAPI在C++源文件中打印参数的类型。如果我在clang(ParmVarDecl*param)中有参数表示,我可以使用param->getNameAsString()打印参数的名称。我需要一个方法param->getTypeAsString(),但没有这样的方法。那么还有其他方法可以完成这项任务吗? 最佳答案 在llvmirc中得到了我的问题的答案:有一个方法std::stringclang::QualType::getAsString(SplitQualTypesplit)所以这对我有用:ParmVarDecl

c++ - 使用 clang API 打印参数的类型 (ParmVarDecl)

我需要使用clangAPI在C++源文件中打印参数的类型。如果我在clang(ParmVarDecl*param)中有参数表示,我可以使用param->getNameAsString()打印参数的名称。我需要一个方法param->getTypeAsString(),但没有这样的方法。那么还有其他方法可以完成这项任务吗? 最佳答案 在llvmirc中得到了我的问题的答案:有一个方法std::stringclang::QualType::getAsString(SplitQualTypesplit)所以这对我有用:ParmVarDecl

c++ g++ llvm-clang 编译器分析

请注意,我的问题不是:我如何告诉我的编译器在开启分析的情况下进行编译。我想配置我的编译过程。对于每个文件,我想知道程序的每一行花费了多少时间。我正在处理一个项目,有些文件的编译时间很长,我正在尝试找出原因。有没有办法用g++或llvm-clang做到这一点?谢谢!-v-ftime-report的输出(什么意思)?下面是“解析器”还是“扩展”模板的使用?Executiontimes(seconds)callgraphconstruction:0.06(2%)usr0.00(0%)sys0.09(2%)wall3181kB(1%)ggccallgraphoptimization:0.05(

c++ g++ llvm-clang 编译器分析

请注意,我的问题不是:我如何告诉我的编译器在开启分析的情况下进行编译。我想配置我的编译过程。对于每个文件,我想知道程序的每一行花费了多少时间。我正在处理一个项目,有些文件的编译时间很长,我正在尝试找出原因。有没有办法用g++或llvm-clang做到这一点?谢谢!-v-ftime-report的输出(什么意思)?下面是“解析器”还是“扩展”模板的使用?Executiontimes(seconds)callgraphconstruction:0.06(2%)usr0.00(0%)sys0.09(2%)wall3181kB(1%)ggccallgraphoptimization:0.05(

c++ - LTO 中的优化是否与正常编译中的相同?

在编译翻译单元时,编译器会进行大量优化-内联、常量折叠/传播、别名分析、循环展开、死代码消除以及许多我从未听说过的其他优化。在多个翻译单元之间使用LTO/LTCG/WPO时是否全部完成,或者只是完成了其中的一个子集(或变体)(我听说过内联)?如果没有完成所有优化,我会考虑统一构建优于LTO(或者当有超过1个统一源文件时可能同时使用它们)。我的猜测是它不一样(统一构建具有完整的优化集),而且它在编译器之间变化很大。每个编译器的lto文档并没有准确回答这个问题(或者我无法理解它)。由于lto涉及将中间表示保存在目标文件中,理论上LTO可以进行所有优化......对吗?请注意,我不是在询问构

c++ - LTO 中的优化是否与正常编译中的相同?

在编译翻译单元时,编译器会进行大量优化-内联、常量折叠/传播、别名分析、循环展开、死代码消除以及许多我从未听说过的其他优化。在多个翻译单元之间使用LTO/LTCG/WPO时是否全部完成,或者只是完成了其中的一个子集(或变体)(我听说过内联)?如果没有完成所有优化,我会考虑统一构建优于LTO(或者当有超过1个统一源文件时可能同时使用它们)。我的猜测是它不一样(统一构建具有完整的优化集),而且它在编译器之间变化很大。每个编译器的lto文档并没有准确回答这个问题(或者我无法理解它)。由于lto涉及将中间表示保存在目标文件中,理论上LTO可以进行所有优化......对吗?请注意,我不是在询问构