news 2026/8/21 17:23:25

Cplusplus生成代码大小的说明-–-behaviac

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cplusplus生成代码大小的说明-–-behaviac

原文

C++版本广泛的用到了template。

Code bloat occurs because compilers generate code for all templated functions in each translation unit that use them. Back in the day the duplicate code was not consolidated resulting in “code bloat”. These days the duplicate code can be removed at link time.

所以,在看到产生的代码的大小后不要过于惊慌。(另外,编译速度也会比较慢。)

在3.4.0后的版本里,behaviac已经支持了Link Time Optimization(LTO)。LTO可以极大的减少产生代码的大小以及优化产生代码的效率。

gcc

  • 如下所示,通过参数指定Release以及ForeUseRelease可以打开LTO(如果你的gcc支持的话)

    cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DBEHAVIAC_VERSION_MODE=ForeUseRelease --build ../../../..

  • 或者通过cmake gui设置CMAKE_BUILD_TYPEReleaseBEHAVIAC_VERSION_MODEForeUseRelease

  • gcc版本需要是4.9以上,低版本不支持LTO

  • 其他版本的gcc请参考相应文档设置LTO

msvc

  • 在visual studio中可以参考打开编译选项/Gy, /GL及/OPT:ICF /OPT:REF /LTCG链接选项
  • 指定ForeUseRelease的时候,cmake生成的项目文件,在Release下缺省的已经打开上述优化开关。
  • 也可以考虑调整O1,O2或Ox编译选项

请参考构建说明

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 21:38:52

【求解释】智子递归架构:基于互补递归与河洛调控的智能系统框架

智子递归架构:基于互补递归与河洛调控的智能系统框架——简化符号、清晰表述与数学实现研究者:桑干河报告版本:1.0发布日期:2023年10月---摘要智子递归架构是一种基于二值递归单元(智子)、互补对称性与全局…

作者头像 李华
网站建设 2026/8/21 21:39:24

异步SAR Simulink模型及其在MATLAB仿真中的应用

异步SAR simulink模型(和virtuoso电路模型很像,精度自己可以改)。 做MATLAB仿真,包括zoom或者其他混合架构adc可以用到这个模型。在玩ADC设计的时候,异步SAR结构就像个宝藏男孩——速度快还省电,但要把行为…

作者头像 李华
网站建设 2026/8/21 7:10:26

Go 语言结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。 结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性: Titl…

作者头像 李华
网站建设 2026/8/21 22:16:58

C语言图论:最小生成树算法

本文献给: 已掌握图论基础,希望理解如何在带权连通图中找到最小生成树的C语言学习者。本文将系统讲解两种经典的最小生成树算法。 你将学到: 最小生成树问题的定义与核心概念Prim算法:从顶点出发,逐步扩张生成树Kruska…

作者头像 李华
网站建设 2026/8/21 22:15:59

探索 BMS 仿真:搭建电池管理系统的 Matlab 模型

BMS仿真,电池管理系统,整个BMS的matlab仿真模型。 包含限位,EKF-SOC,均衡,充点电控制,冷却风机,充电控制,开机自检功能。 SOC:State of charge,电池剩余电量百…

作者头像 李华