哪种清除内存块(或SDL表面)的最快方法?

时间:2011-12-21 01:38:28

标签: c++ c assembly sdl

我目前正在开发一个SDL项目。它基本上在屏幕上绘制和移动图像(表面)。

要移动图像而不留下痕迹,必须首先清除屏幕表面,非常类似于glClear(),我现在正在使用一个简单的for循环迭代表面像素(也在表面或memset上绘制一个黑框)。

虽然之前的解决方案适用于小型表面,但随着表面变大,它们变得越来越慢,所以我正在寻找能够清除(零)存储块的最快方法。

另外,一位朋友指出使用SIMD指令可以非常快速地完成工作,但是我最后一次完成ASM是在8085上,对此的任何见解也可能有用。

2 个答案:

答案 0 :(得分:15)

最快的方法是使用memset

memset(ptr, 0, length);

这会自动在支持 * 的体系结构上使用SIMD。你不会打败它。它已经受到内存限制,所以它写入零的速度和处理器可以吐出的速度一样快。我不知道是谁告诉你memset对于较大的块来说速度较慢,但​​是你应该停止听那个人。

* 有些工具链无法提供快速memset。你不太可能使用它。

答案 1 :(得分:3)

您应该尝试memset,应该对实施进行高度优化,以利用您系统上可用的任何说明。