我知道scons
实现了它的功能ccache
,但我坚持使用另一个构建系统.
我也知道gocache
sourceforge上有一个项目旨在ccache
为其他编译器实现类似功能,但似乎并不完整.
在游戏编程效率的名义下,一些程序员不信任几个C++特性.我的一位朋友声称了解游戏行业的运作方式,并会提出以下意见:
这些陈述中有多少是真的?设计C++功能时要牢记效率.这种效率不足以进行游戏编程吗?97%的游戏编程?
C-way-of-thinking仍然似乎对游戏开发社区有很好的把握.这是真的?
我在GDC 2009上观看了关于多核编程的另一个视频.他的演讲几乎完全针对单元编程,在处理之前需要进行DMA传输(简单的指针访问不适用于Cell的SPE).他不鼓励使用多态,因为指针必须"重新基于"DMA传输.多么悲伤.这就像回到广场一样.我不知道是否有一个优雅的解决方案来编程Cell上的C++多态.DMA传输的主题是深奥的,我在这里没有太多背景.
我同意C++对于那些希望使用小语言进行破解而不是阅读书籍堆栈的程序员来说也不是很好.模板也吓坏了调试.你是否同意游戏社区过分担心C++?
在CRTP模式中,如果我们想要将派生类中的实现函数保持为受保护,则会遇到问题.我们必须将基类声明为派生类的朋友或使用类似的东西(我没有尝试过链接文章的方法).是否有其他(简单)方法允许将派生类中的实现函数保持为受保护?
编辑:这是一个简单的代码示例:
template<class D>
class C {
public:
void base_foo()
{
static_cast<D*>(this)->foo();
}
};
class D: public C<D> {
protected: //ERROR!
void foo() {
}
};
int main() {
D d;
d.base_foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出error: ‘void D::foo()’ is protected
了g ++ 4.5.1,但是如果protected
被替换为compiles public
.
使用智能指针多少钱,特别是boost :: shared_ptr在时间和内存方面与裸指针相比成本更高?对于游戏/嵌入式系统的性能密集型部分,是否更好地使用裸指针?您是否建议使用裸指针或智能指针来处理性能密集型组件?
您对代码提交的评论使用了什么模板?
模板的一个示例是:
理想情况下,每个更改都应映射到问题跟踪器中的问题.这个模板好吗?
在我用C++编写的AI应用程序中,
在这种情况下,有没有任何优化技术?虽然我现在不打算优化应用程序,但为项目选择C++而不是Java的一个方面是提供更多的优势,以便能够使用非面向对象的方法(模板,过程,重载).
特别是,与虚拟功能相关的优化技术是什么?虚函数通过内存中的虚拟表实现.有没有办法将这些虚拟表预取到L2缓存上(从内存/ L2缓存中获取的成本正在增加)?
除此之外,C++中的数据局部技术是否有很好的参考?这些技术将减少数据提取到计算所需的L2高速缓存的等待时间.
可能的例外是最具争议的C++功能.包括谷歌在内的许多团队都不使用它们.当然,是否使用它们的决定取决于上下文 - 例如,在某些游戏中,可能会在内存不足时崩溃,但在医疗设备控制软件中则不然.除了内存不足之外,一些团队可能会使用例外来解决网络中断,文件未找到等问题,但其他人可能会说这种情况太常见而不能被称为例外(其他人可能会说,但如果它很常见,那么?)
通常,不使用异常的决定是基于可能被误导的论点,即很难编写异常安全的代码.有人说这个论点是错误的,因为使用错误代码的替代方法将导致至少同样困难的代码.大卫亚伯拉罕澄清了这一点.
在这个问题上,我很想知道:
由于我在(抢占式)多任务,多核环境中运行多线程程序的性能评估测试,因此可以定期更换该进程.我想计算延迟,即只计算进程处于活动状态的持续时间.这将允许我推断性能在非多任务环境中的表现,即,只有一个程序运行(大多数时间),或者在不同的工作负载上.
通常测量两种时间:
我相信我需要的是单个线程的完成时间,这可能与任何线程使用的最大CPU时间不同,这是由于线程之间的任务依赖性结构.例如,在具有2个线程的进程中,线程1在运行时的前三分之二(CPU时间t)中负载很重,而线程2在该进程的后三分之二中加载(同样,对于CPU时间t).在这种情况下:
此外,多线程本身带来了不确定性.这个问题可能需要多次运行测试并总结结果.
此外,延迟还取决于操作系统如何调度线程; 如果进程的某些线程等待CPU而其他线程运行,则事情会变得更复杂.但是让我们忘记这一点.
有没有一种有效的方法来计算/估计这个完工时间?要提供代码示例,请使用任何编程语言,但最好使用Linux上的C或C++.
PS:我理解这个makepan的定义与调度问题的定义不同.调度问题中使用的定义类似于挂钟时间.
我想在Windows上使用CMake设置自动构建.我正在使用Visual Studio 2005.
更新:这是我正在使用的:
我将devenv.exe设置为我的PATH.然后构建我运行下面的命令.我正在使用Hudson来构建.
devenv Crackpot.sln/build Debug/project ALL_BUILD
根据http://blogs.msdn.com/aaronhallberg/archive/2007/06/29/building-from-the-command-line-with-devenv.aspx更喜欢使用"devenv"而不是"denenv.exe"因为后者可能会产生一个GUI,从而挂起构建.