2010-11-18 12 views
6

我在一个游戏编程学校,在这里我们必须学习代码速度,这似乎很重要。C/C++转换为汇编,低级别内存行为:它是如何完成的?

在C/C++中编程时是否有任何教程或事情列表需要注意?

我想知道很多事情,比如为什么C的默认行为是通过传递数据而不是引用/地址,或者编译器如何将引用转换为汇编程序,或者C循环如何将自身转换为JMP。

我很担心,因为python使用另一种方式,但另一方面python不使用运算符来复制值,而是一个可能在语法上很重的函数。

我真的不认为知道如何汇编编程真的是必要的,因为它是痛苦的,我猜它只是需要知道一个寄存器等

+1

最终,这个问题归结为“在C/C++中编程时是否有任何教程或需要注意的事项列表?”为此,我会在这里指出:[http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list] – 2010-11-18 16:41:23

+1

强制性的“过早优化是邪恶的”评论在这里。如果你的算法是“O(太多)”(例如,在基于瓦片的游戏中,循环遍历游戏中的所有对象以查明播放器旁边是否有X),那么对C或汇编的深入了解就不能可能会拯救你。优化你自己的优化工作 - 找出优化在哪里(通过剖析,而不是猜测),以及用思想“优化”。另外,可以说“不是真正的问题”。 – delnan 2010-11-18 16:46:06

+0

您需要知道程序集,以便了解计算机的工作原理,以便对其进行优化。 – 2010-11-18 16:53:24

回答

6

查一查你的编译器的文档,切换到输出asm步骤而不是机器代码。我曾与之合作过的每个编译器都有一个。用它发送一些简单的代码到asm并检查它。

VS也可以在单步执行代码时选择“查看程序集”。

你的问题没有任何明确的答案。这完全依赖于编译器和体系结构。即使是提供给编译器的参数。

编辑:

,有没有明确的回答你的问题将不会从胡编阻止人们的事实。一个例子是愚蠢的事情,像通过引用传递大对象(比如字符串:p)而不是按值返回。对于新的C++开发人员来说,这些事情似乎是合理的。 OF COURSE将一个字符串传递给一个函数来获得填充比构建一个副本并将其从该函数返回仅仅在赋值时再次复制它更快。事实上,事实并非如此,它非常依赖于编译器,但是你可以通过试图让所有的智能来重复编译器的优化能力。

有很多关于使您的代码更快的错误信息。用一粒盐把所有东西都拿走。大多数声称知道如何制作快速代码的人都充满了垃圾。快速代码的唯一合理答案是配置您的代码。当需要进行微观优化时,您会做一些针对您的目标平台的特定内容。一般知识,“这是更快,”在那个时候,你的东西将不会对你有任何用处。

+0

所以我想我必须探索更高层次的算法和设计模式,以针对每种情况提出更快的解决方案。虽然我不知道像quake3这样的引擎如此快速。 – jokoon 2010-11-18 19:26:34