我目前正在开发一个SDL项目。它基本上在屏幕上绘制和移动图像(表面)。
要移动图像而不留下痕迹,必须首先清除屏幕表面,非常类似于glClear(),我现在正在使用一个简单的for循环迭代表面像素(也在表面或memset上绘制一个黑框)。
虽然之前的解决方案适用于小型表面,但随着表面变大,它们变得越来越慢,所以我正在寻找能够清除(零)存储块的最快方法。
另外,一位朋友指出使用SIMD指令可以非常快速地完成工作,但是我最后一次完成ASM是在8085上,对此的任何见解也可能有用。
答案 0 :(得分:15)
最快的方法是使用memset
。
memset(ptr, 0, length);
这会自动在支持 * 的体系结构上使用SIMD。你不会打败它。它已经受到内存限制,所以它写入零的速度和处理器可以吐出的速度一样快。我不知道是谁告诉你memset
对于较大的块来说速度较慢,但是你应该停止听那个人。
* 有些工具链无法提供快速memset
。你不太可能使用它。
答案 1 :(得分:3)
您应该尝试memset
,应该对实施进行高度优化,以利用您系统上可用的任何说明。