gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:11:10 26 4
gpt4 key购买 nike

我目前正在使用 SDL 开发一个项目。它主要是在屏幕上绘制和移动图像(表面)。

要移动图像而不留下痕迹,您必须首先清除屏幕表面,这与 glClear() 非常相似,我目前正在使用一个简单的 for 循环遍历表面的像素(也在表面或 memset 上绘制一个黑框)。

虽然以前的解决方案适用于小表面,但随着表面变大,它们会变得越来越慢,所以我一直在寻找可以清除(归零)内存块的最快方法。

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

最佳答案

最快的方法是使用memset

memset(ptr, 0, length);

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

*有些工具链无法为您提供快速的memset。您不太可能正在使用一个。

关于c++ - 清除内存块(或 SDL 表面)的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com