本文详细介绍Linux系统编程之C++游戏程序优化
4、代码尺寸
编译器因为C++产生冗长的代码而臭名昭著。由于内存有限,而小的东西往往是快的,所以使你的可执行文件尽可能的小是非常重要的。首先可以做的事情是拿一个编译器来研究。如果你的编译器会在可执行文件中保存Debug信息的话,那么把它们移除掉。(注意MS VC会把Debug信息放在可执行文件外部,所以没关系)异常处理会产生额外的代码,尽可能的去除异常处理代码。确保连接器配置为去除无用的函数和类。开启编译器的最高优化级别,并尝试设置为尺寸最小化而不是速度最大化 — 有时候,由于Cache命中的提高,会产生更好的运行效果。(注意在使用这项设置时检查instrinsic功能是否也处于打开状态)去掉所有Debug输出状态下的浪费空间的字符串,使编译器把多个相同的字符串捆绑成一个实例。
内联通常是造成大函数的首犯。编译器可以自由的选择注意或忽略你写的inline关键字,而且它们还会背着你制造一些内联。这是另一个要你保持轻量级的构造函数的原因,这样堆栈中的对象就不会因为有大量的内联代码而膨胀。同时也要小心重载运算符,即使是最简短的表达式如m1=m2*m3如果m2和m3是矩阵的话,也可能产生大量的内联代码。一定要深入了解你的编译器对于内联的设置。
启用运行时类型信息(RTTI)需要编译器为每一个类产生一些静态信息。RTTI一般来说是缺省启用的,这样我们的代码可以调用dynamic_cast以及检测一个对象的类型,考虑完全禁止使用RTTI和dynamic_cast以节省空间(进一步的说,有时候dynamic_cast在某些实现中需要付出很高的代价)另一方面,当你真的需要有基于类型的不同行为的时候,增加一个不同行为的虚函数。这是更好的面向对象设计(注意static_cast与这不同,它的效率和C语言的类型转换一样)。
作者:yuanyang 责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法