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

Neo*_*Man 7 c c++ assembly sdl

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

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

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

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

Die*_*Epp 15

最快的方法是使用memset.

memset(ptr, 0, length);
Run Code Online (Sandbox Code Playgroud)

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

*有一些工具链不能给你快速memset.你不太可能使用它.