DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

omit-frame-pointer

开启该选项,主要是用于去掉所有函数SFP(Stack Frame Pointer)的,即在函数调用时不保存栈帧指针SFP,代价是不能通过backtrace进行调试根据堆栈信息了。通过去掉SFP,可以提高程序运行速度,达到优化程序的目的。如果要打开栈指针,使用 -fno-omit-frame-pointer 。

另外一个类似选项-fomit-leaf-frame-pointer :用于去掉子函数leaf function的SFP。该选项属于优化选项,在指定-O选项时,也会开启该选项。

fno-tree-vectorize

gcc -O3级优化已包括 “-ftree-vectorize” 选项对程序进行自动向量化,关闭向量化的选项是-fno-tree-vectorize。使用-ftree-vectorizer-verbose=n选项可以显示自动向量化的结果,其中n的取值范围为0到9。自动矢量化技术简单讲就是一次处理多个数据SIMD,比如x86 sse/mmx,arm neon技术。

fno-optimize-sibling-calls

有些情况下,比如尾部调用子函数,call会被优化成jump指令。使用该选项恢复子函数调用栈。

内存泄漏检测

set(CMAKE_CXX_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -fno-optimize-sibling-calls -ggdb")
set(CMAKE_C_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -fno-optimize-sibling-calls -ggdb")
set(CMAKE_L_FLAGS "-fsanitize=undefined,address,leak -fno-omit-frame-pointer -fno-optimize-sibling-calls -ggdb")

使用Address Sanitizer时,在运行时可以使用ASAN的选项。如下打印出ASAN帮助信息:

ASAN_OPTIONS=help=1 ./test_asan

有用的ASAN选项配置,其中halt_on_error=0跟-fsanitize-recover=address需要同时加上:

# compile flag
-fsanitize-recover=address

# run-time option
ASAN_OPTIONS=halt_on_error=0:alloc_dealloc_mismatch=0

参考

posted on   DoubleLi  阅读(559)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-07-19 李超:WebRTC传输与服务质量
2021-07-19 FFmpeg内存模型与API介绍(notes 2)
2018-07-19 centOS7服务管理与启动流程
2018-07-19 CentOS 6和CentOS 7防火墙的关闭
2018-07-19 linux 系统安装配置 zabbix服务(源码安装)
2018-07-19 zabbix_agentd客户端安装与配置(Linux操作系统)
2018-07-19 zabbix_agentd客户端安装与配置(windows操作系统)
点击右上角即可分享
微信分享提示