当前位置: 首页 > ai >正文

gcc编译优化参数-O0和-Os区别

-O0:这是 GCC 编译器的默认优化级别,表示“不进行任何优化”。其目标是在编译过程中保留尽可能多的调试信息,方便开发者进行调试。
-Os:这是一个优化级别,目标是在优化代码的同时尽可能减小生成的可执行文件的大小。它通过优化代码结构和减少不必要的指令来实现这一目标。

什么时候选择编译-O0和-Os

优化级别详解

  • -O0:关闭所有优化,编译速度最快但生成代码性能最低,适合调试阶段
  • -O1:基础优化,平衡编译时间和执行效率,启用约30个优化选项
  • -O2:推荐级别,启用约60个优化选项(如指令调度、循环优化),性能提升显著且风险较低
  • -O3:激进优化(如函数内联、向量化),可能增加10-15%性能但会延长编译时间并增大二进制体积
  • -Os:针对代码体积优化,禁用可能增加大小的-O2选项,适合嵌入式场景

举例使用修改Makefile. 

 CFLAGS="-Os -pipe -fomit-frame-pointer"  # 编译时优先优化体积

裁剪调试符号

strip --strip-unneeded /path/to/binary    # 剥离调试符号表

优化路径建议:编译参数优化 → 组件裁剪 → 系统精简 → 二进制压缩 

优化前后可以对比数据包的大小,file file_name 查看文件信息。 

内存对齐优化

__attribute__((aligned(64))) int buffer[1024];  // 64字节对齐优化缓存行

     现代CPU缓存行(Cache Line)通常为64字节,强制对齐可避免单个缓存行被多个线程共享(防止伪共享问题)
    保证数组首地址从64字节边界开始,使每次内存访问都能完整填充缓存行

    http://www.xdnf.cn/news/8829.html

    相关文章:

  1. 先知AI打造智能企业引擎
  2. kaggle房价预测-0.12619-排名:757
  3. ARM架构深度解析:从指令集到内核设计
  4. 机械师安装ubantu双系统:二、磁盘分区
  5. 小可爬楼
  6. 通过 Terraform 构建您的第一个 Azure Linux 虚拟机
  7. 湖仓融合的“最后一公里”:StarRocks 存算分离如何优化湖上实时分析?
  8. openssl 使用生成key pem
  9. 万事如函数
  10. Windows File Copy
  11. 第11次课 while循环
  12. (27)运动目标检测 之 分类(如YOLO) 数据集自动划分
  13. 关于多类型数据划分清洗的整理
  14. 09_模型训练篇-卷积(上):如何用卷积为计算机“开天眼”?
  15. 【C语言】指针全局变量
  16. PostGIS使用小结
  17. 微雪墨水屏 如何 控制绘制图形(如点、线、矩形等)线条粗细或点的大小
  18. ChatGPT+知网,AI如何辅助真实科研写作流程?
  19. 以太坊的基本理解
  20. 2025年- H47-Lc155 --102. 二叉树的层序遍历(队列、广搜)--Java版
  21. STL-从list节点创建和释放展开(内存管理)
  22. Claude Code Agent 模式深度解读(一)!Anthropic提出的下一代Code CLI工具
  23. 第四章 面向对象(基础)
  24. ​​UniBoard:私有化部署,导航笔记文件一站式管理
  25. JavaScript 中的 structuredClone() 如何彻底改变你的对象复制方式
  26. 几个直觉泵问题
  27. 线程池优雅关闭的哲学
  28. java基础知识回顾3(可用于Java基础速通)考前,面试前均可用!
  29. 空间计算的未来:在通用芯片上构建高可靠系统
  30. 沙井SMT贴片加工核心工艺解析