c – 清除内存块(或SDL表面)的最快方法是什么?

前端之家收集整理的这篇文章主要介绍了c – 清除内存块(或SDL表面)的最快方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在开发一个SDL项目.它基本上绘制和移动屏幕上的图像(表面).

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

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

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

解决方法

最快的方法是使用memset.
memset(ptr,length);

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

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

猜你在找的C&C++相关文章