[CppCon 2015] "Memory and C++ debugging at EA" 实录

由于微信会对外部页面重新排版,若文中的链接无法访问,请选择右上角菜单“在浏览器中打开”即可。

(本文的永久链接)

Scott Wardle 在 CppCon 2015 上的分享题为《Memory and C++ debugging at EA》,是关于内存和调试方面的一些心得。这里是视频链接(需翻墙),和演讲稿链接。

Scott 同学有 20+ 年游戏开发的经验,这个分享包括了在不同时期 (2000 年的 PS2 时期,2005 年左右的 XBox360......

[知乎回答] C++ template 为什么不能推导返回值类型?

这个问题是周末在知乎上看到的一个问题,有点意思,俺觉得可以讨论一下。

原问题

C++ template 为什么不能推导返回值类型?

补充说明:

例如:

template<typename T>

T value()

{

// for expample

T* ptr = static_cast<T*>(_ptr);

return *ptr;

}

希望能有透彻一点的解释。如果有什么解决方案(如C++11和boost的一些高级用法),也希望能一并回答出来。

我的答案

讨论之前先说一下,结合上面的补充说明来看,这个问法其实有一点点瑕疵......

基于插件的引擎设计

这篇小文是我读“Building an Engine Plugin System”(需翻墙)随手留下的一些笔记。

开始正文前,先无责任评论两句吧。bitsquid是一个强调动态(各种reload),极简设计(接口知识最小化),轻量级(核心不到20万行)的引擎,跟俺口味很贴近,所以俺一向比较关注他们的动向。这是个小团队,虽然网站上没啥信息,引擎也未公开放出,可是blog的水分很少,质量比较高,是俺的菜。

按照传统套路,先啰嗦一番“非插件化设计”的弊端:

想扩展现有行为,就得修改代码,重编引擎。(隐含工作量太大——获取全部代码和依赖的库,架设所有build环境)

一旦开始有了本地改动就得维......

为什么从本质上讲,渲染逻辑不适合放到子线程中去?

按: 本文成文于一年前 [2013-01-13],修相关的 bug 修得郁闷,遂成文,[2014-03-20] 整理旧文档时稍作修订。

为什么从本质上讲,渲染逻辑不适合放到子线程中去?

因为渲染是一个需要大量的 CPU 和 GPU 同时参与的操作,无论如何组织架构,在事实上均难以避免高频和实时的较大数量的数据的更新和传输,这是渲染(尤其是 大量动态物体的数据在不断被改变 的情况下)的本质决定的。

从实践上看,那些线程化渲染(threaded rendering)的常见做法中,勉强去做每帧同步,或隔帧同步,或延迟1-N帧同步,均会导致大量的细节被暴露给整个架构。此亦从根本上违反了软件开发封......

客户端动态预测技术和延时补偿技术

以前在做飞机游戏 (Wings of Fate) 的时候,实现过一个改善同步的技术,用来降低高ping客户端的延时感受(客户端的动态预测和延时补偿技术)。前两天跟朋友L聊天时表达了一下,觉得有记录下来的价值,遂有此文,以备日后参考。

有A和B两个客户端,在B移动时,A的客户端上会以一定频率收到B的移动信息同步。如果总是等到收到B的信息后再去被动地移动,那就会导致在A的机器上,B的移动总是滞后的。这一般是典型MMO如WOW的做法,而对某些类型的游戏(fps,空战)来讲,这种延迟是难以接受的。

一个做法是,A总是通过B之前的移动去预测其接下来的移动情况(Q3的做法),这样有极大的可能(实测至少......

知识共享许可协议
本作品由Gu Lu创作,采用知识共享Attribution-NonCommercial-NoDerivatives 4.0 国际许可协议进行许可。