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