news 2026/4/18 10:07:45

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/4/18 8:07:10

手把手拆解三菱PLC印字机实战项目

三菱PLC组装印字机完整项目资料 1、采用三菱FX3U,威纶通MT6071IP触摸屏 ( 2、有说明书,BOM零件表,电路图 3、程序有完整的注释,结构清晰明了。 很好的项目学习资料。 工业02-18.电气印字机电气最近淘到一套工业级印字机的完整项目…

作者头像 李华
网站建设 2026/4/16 10:47:21

QSharedMemory 变量在对象析构的时候要怎么处理

在Qt中使用QSharedMemory时,对象析构时的正确处理至关重要,主要涉及共享内存的释放和跨进程同步问题。以下是关键处理原则和步骤: 1. 自动析构行为(Qt内置机制) 自动detach():当QSharedMemory对象销毁时&…

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

【免费领源码】Python/Mysql数据库+53824中国传统服装微信小程序的设计与实现+ 计算机毕业设计项目推荐上万套实战教程JAVA、PHP,node.js,C++、python、大屏数据可视化

摘要 本文旨在探讨基于Spring Boot框架的中国传统服装微信小程序的设计与实现过程。该微信小程序旨在为用户提供一个便捷、高效的线上购物平台,专注于中国传统服装的展示与销售。通过深入分析用户需求和市场趋势,我们设计了包含用户管理、服装分类、热卖…

作者头像 李华
网站建设 2026/4/18 8:07:53

django用Python设计自主学习系统

目录 摘要 演示视频 系统功能实现 代码实现 推荐项目 项目案例 项目开发总结 为什么选择我 源码获取 博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于…

作者头像 李华
网站建设 2026/4/16 15:26:35

Linux的shell命令

1.基础的shell命令在Linux系统中不同于window中的图形化操作,linux更多的是用的命令行的操作,下面我们来看看其中的一些基础shell命令。首先我们看下面这段命令解释一下其中的提示符:linuxubuntu:~$ sudo su [sudo] linux 的密码:…

作者头像 李华