首页 > 编程语言 >C++火车头

C++火车头

时间:2024-04-27 15:57:23浏览次数:30  
标签:火车头 程序 GCC C++ 编译器 pragma 优化 optimize

点击查看火车头
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-frename-registers")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")

这段代码是一段C++编译优化指令,用于优化编译器对程序代码的优化。编译器优化是指在保持程序正确性的前提下,通过各种方法减少程序的大小、提高程序的运行速度。这些优化指令告诉编译器如何对代码进行优化。

  1. #pragma GCC optimize(3):告诉编译器使用等级3的优化。等级3的优化包括许多高级优化技术,如循环展开、函数内联等。

  2. #pragma GCC target("avx"):告诉编译器针对AVX指令集进行优化。AVX(Advanced Vector Extensions)是一种Intel处理器支持的向量计算扩展,可以提高浮点运算和向量运算的性能。

  3. #pragma GCC optimize("Ofast"):告诉编译器使用“Ofast”优化选项。Ofast是一种优化级别,表示“优化速度,不惜一切代价”。在这种优化级别下,编译器会尝试使用各种优化技术,以提高程序的运行速度,但可能会导致程序的大小增加。

  4. #pragma GCC optimize("inline"):告诉编译器将函数内联。内联函数是指将函数体替换为函数调用的过程,这样可以减少函数调用的开销,提高程序的运行速度。

  5. #pragma GCC optimize("-fgcse"):告诉编译器启用全局公共子表达式消除优化。全局公共子表达式消除是指在程序中查找并消除所有公共子表达式,以减少程序的大小和提高运行速度。

  6. #pragma GCC optimize("-fgcse-lm"):告诉编译器启用全局公共子表达式消除,并启用循环不变代码 Motion。循环不变代码 Motion是指将循环不变的代码移出循环,以减少循环的计算次数,提高程序的运行速度。

  7. #pragma GCC optimize("-fipa-sra"):告诉编译器启用 interprocedural 分析优化。interprocedural 分析是指在程序中分析函数之间的调用关系,以优化函数调用。

  8. #pragma GCC optimize("-ftree-pre"):告诉编译器启用树预处理优化。树预处理优化是指在编译器对程序进行优化之前,对程序进行预处理,以提高优化的效果。

  9. #pragma GCC optimize("-ftree-vrp"):告诉编译器启用树向量寄存器分配优化。树向量寄存器分配是指在编译器对程序进行优化时,将向量运算分配到不同的寄存器中,以提高向量运算的性能。

  10. #pragma GCC optimize("-fpeephole2"):告诉编译器启用 peephole 优化器。peephole 优化器是一种简单的优化器,可以在程序中查找并消除一些特定的代码模式,以减少程序的大小和提高运行速度。

  11. #pragma GCC optimize("-ffast-math"):告诉编译器启用快速数学优化。快速数学优化是指在编译器对数学运算进行优化,以提高数学运算的性能。

  12. #pragma GCC optimize("-fsched-spec"):告诉编译器启用调度优化。调度优化是指在编译器对程序进行优化时,对程序中的指令进行重新排序,以提高程序的运行速度。

  13. #pragma GCC optimize("unroll-loops"):告诉编译器启用循环展开优化。循环展开是指将循环展开成多个连续的迭代,以减少循环的计算次数,提高程序的运行速度。

  14. #pragma GCC optimize("-falign-jumps"):告诉编译器启用跳转对齐优化。跳转对齐优化是指在编译器对程序进行优化时,将跳转指令对齐到相同的寄存器中,以减少跳转的开销,提高程序的运行速度。

  15. #pragma GCC optimize("-falign-loops"):告诉编译器启用循环对齐优化。循环对齐优化是指在编译器对程序进行优化时,将循环指令对齐到相同的寄存器中,以减少循环的开销,提高程序的运行速度。

  16. #pragma GCC optimize("-falign-labels"):告诉编译器启用标签对齐优化。标签对齐优化是指在编译器对程序进行优化时,将标签对齐到相同的寄存器中,以减少标签的开销,提高程序的运行速度。

  17. #pragma GCC optimize("-fdevirtualize"):告诉编译器启用虚函数优化。虚函数优化是指将虚函数调用转换为直接函数调用,以减少虚函数调用的开销,提高程序的运行速度。

  18. #pragma GCC optimize("-fcaller-saves"):告诉编译器启用调用者保存优化。调用者保存优化是指在函数调用时,只保存必要的寄存器,以减少函数调用的开销,提高程序的运行速度。

  19. #pragma GCC optimize("-fcrossjumping"):告诉编译器启用跨跳优化。跨跳优化是指在循环中,将跳转指令转换为无条件跳转,以减少跳转的开销,提高程序的运行速度。

  20. #pragma GCC optimize("-fthread-jumps"):告诉编译器启用线程跳跃优化。线程跳跃优化是指将线程局部存储(TLS)对齐到特定的内存地址,以减少内存访问的开销,提高程序的运行速度。

  21. #pragma GCC optimize("-funroll-loops"):告诉编译器启用循环展开优化。循环展开是指将循环展开成多个连续的迭代,以减少循环的计算次数,提高程序的运行速度。

  22. #pragma GCC optimize("-fwhole-program"):告诉编译器启用全程序优化。全程序优化是指在编译器对整个程序进行优化,以减少程序的大小和提高程序的运行速度。

  23. #pragma GCC optimize("-freorder-blocks"):告诉编译器启用块重排优化。块重排优化是指在编译器对程序进行优化时,对程序中的基本块进行重新排序,以减少程序的运行时间。

  24. #pragma GCC optimize("-fschedule-insns"):告诉编译器启用指令调度优化。指令调度优化是指在编译器对程序进行优化时,对程序中的指令进行重新排序,以减少程序的运行时间。

  25. #pragma GCC optimize("inline-functions"):告诉编译器启用内联函数优化。内联函数优化是指将一些小函数的体直接插入到调用点,以减少函数调用的开销,提高程序的运行速度。

  26. #pragma GCC optimize("-finline-small-functions"):告诉编译器启用内联小函数优化。内联小函数优化是指将一些小函数的体直接插入到调用点,以减少函数调用的开销,提高程序的运行速度。

  27. #pragma GCC optimize("-ftree-switch-conversion"):告诉编译器启用树分支转换优化。树分支转换优化是指在编译器对程序进行优化时,将一些分支指令转换为更高效的分支指令,以减少程序的运行时间。

  28. #pragma GCC optimize("-foptimize-sibling-calls"):告诉编译器启用兄弟函数调用优化。兄弟函数调用优化是指在编译器对程序进行优化时,将一些函数调用转换为更高效的函数调用,以减少程序的运行时间。

  29. #pragma GCC optimize("-fexpensive-optimizations"):告诉编译器启用高级优化。高级优化是指在编译器对程序进行优化时,使用一些更复杂的优化技术,以减少程序的大小和提高程序的运行速度。

  30. #pragma GCC optimize("-funsafe-loop-optimizations"):告诉编译器启用不安全的循环优化。不安全的循环优化是指在编译器对程序进行优化时,使用一些可能不安全的优化技术,以减少程序的大小和提高程序的运行速度。

  31. #pragma GCC optimize("inline-functions-called-once"):告诉编译器启用内联一次性函数优化。内联一次性函数优化是指将一些仅被调用一次的函数的体直接插入到调用点,以减少函数调用的开销,提高程序的运行速度。

  32. #pragma GCC optimize("-fdelete-null-pointer-checks"):告诉编译器删除空指针检查优化。空指针检查优化是指在编译器对程序进行优化时,删除一些不必要的空指针检查,以减少程序的运行时间。

这些编译器指令主要用于优化C++代码的编译,从而提高程序的运行速度减少程序的大小。不同的优化级别和优化选项可以组合使用,以达到更好的优化效果。但在实际编程中,建议根据具体需求和场景选择合适的优化级别优化选项,以避免因优化过度而导致的代码可读性和可维护性降低。

标签:火车头,程序,GCC,C++,编译器,pragma,优化,optimize
From: https://www.cnblogs.com/StarsTwinkle/p/18162144

相关文章

  • C/C++:new/delete与malloc/free的区别
    `new`和`delete`是C++中的关键字,而`malloc()`和`free()`是C语言中的函数。它们在内存分配和释放方面有几个重要区别:1.**类型安全性**:-`new`和`delete`是C++中的运算符,它们会自动计算所需的内存大小,并返回正确类型的指针。这意味着你不需要在使用时显式指定......
  • lib 安装失败,error Microsoft Visual C++ 14.0 is required.
    即使安装c++要占用c盘4G,而且仍然有可能报错,error:command'C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\BIN\x86_amd64\cl.exe'failedwithexitstatus2另一种解决方法是直接下载whl,省去编译的过程https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib有可能......
  • python C++混合编程环境搭建
    一、python环境1.下载python安装包2.安装python(选择下载符号文件和二进制文件)注:多半会报错“Error0x80072f7d:FailedtosendrequesttoURL:……”,因为下载超时导致安装失败解决:1)手动下载core_pdb.msi等文件https://www.python.org/ftp/python/3.8.0/win32/(选择......
  • ROS2学习--POP方法编写C++节点 debug过程
    一、编写C++节点并测试 1.创建功能包C++功能包使用ament-camke作为编译基础,依赖为rclcpp。打开终端,进入town_ws/src运行下面的指令,目录结构如下ros2pkgcreatevillage_wang--build-typeament_cmake--dependenciesrclcpp2.创建节点village_wang/src下创建一个wang2.cp......
  • 【Qt专栏】C++删除空指针
    简短不看版:最佳实践if(pMyClass) //这里,pMyClass是指向某个类的指针..{deletepMyClass;pMyClass=NULL; //这句不能少}  完全可以....可能有不少人对Delete删除空指针的用法不屑一顾,但在实际运用当中, 却有不少人会犯类似的错误,最典......
  • C++内联函数
    内联函数关键字inline,inline是空间换时间,提高了程序效率但花费了更多空间。举个例子,下面是一段C语言代码:voidfun(inti){returni*2;}intmain(){inta=4;intb=fun(a);}假定以上C文件被编译器编译成的汇编代码如下:_f_int: addax,@sp[-8] ;相当......
  • 编码技巧C++
    编码技巧C++非零都是true在c++环境下不等于0的数值都被认为是true在判断一个值是否为0时以下代码是等效的,但第一种效率更高inti=123;if(i)cout<<"i不为0";if(i!=0)cout<<"i不为0";不需要用到下标的计数循环可以不用for语句intn;cin>>n;while(n--){......
  • C++ 多级继承与多重继承:代码组织与灵活性的平衡
    C++多级继承多级继承是一种面向对象编程(OOP)特性,允许一个类从多个基类继承属性和方法。它使代码更易于组织和维护,并促进代码重用。多级继承的语法在C++中,使用:符号来指定继承关系。多级继承的语法如下:classDerivedClass:publicBaseClass1,publicBaseClass2,...{......
  • 设计带内存分配的C++类需要注意的几点
    初级内存管理:需要在构造函数中分配内存给ptr,并在析构函数中释放内存,以避免内存泄漏。MyClass::MyClass(){ptr=newint;}MyClass::~MyClass(){deleteptr;}深拷贝:如果您需要实现复制构造函数和赋值运算符重载,您需要进行深拷贝,以确保复制后的对象拥有独......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......