DLL
- 很多公司会采用完全的静态链接, 这样比较省事, 也比较安全
- 静态链接通常比较慢(编译时间影响开发效率), 而且EXE也比较大
- DLL的话如果不使用interface封装会暴露很多类定义
- 如果使用C++/CLI的话不能使用静态链接库
- Debug
- Release能重现而Debug不能重现的BUG通常是变量没初始化
- DMP文件可以方便地重现崩溃时的堆栈调用
- Coding
- 代码规范是一个项目/引擎必须制定的东西, C++标准的缺乏造成每人一种风格习惯
- CodeReview其实是统一风格习惯的一种有效措施
- AtomString/HashString: 这东西本身是为了提高效率而出现的, 但是用不好就会成为影响效率的东西
- Endianness: 主机平台跟Win32是不一样的, 生成二进制格式需要转换
- 全局static变量的初始化顺序没办法控制, 不过函数里的static变量确可以在调用时初始化, 这样可以解决一部分初始化顺序问题
- dbghelp可以通过地址反查代码行, 对付内存泄露比较方便
- SIMD要求128bit对齐的内存, 如XNAMath
- Exception:
- 主机平台应该避免使用
- 有时为了保证稳定性不得不用, 比如美术的编辑工具, 至少要让他们有保存一下的时间, 不要直接崩溃了...
- 模块的初始化/销毁可以使用堆栈处理, 通常这两边的顺序正好相反
- 数学库现在最好的选择是XNAMath, 自己去实现感觉吃力不讨好, 而且也不敢保证没BUG
- 容器最好自己实现, STL的限制有很多;
- 通用型的效率比不上针对特定问题优化过的
- 内存占用的要多一些(主机平台很看重这个)
- 动态分配的内存太多
- 各平台的实现不一样, 对于平台移植有些麻烦
- 最好不要用boost
- 字符串
- 尽量减少const char*的使用(个人习惯)
- 比于比较操作频繁的, 可以使用HashString
- 中文编码处理需要考虑
- 最好把所有字符串做成一个表格, 游戏里通过ID使用