C 步履蹒跚

C 步履蹒跚,c,memory,memset,C,Memory,Memset,有了OpenGL,很多时候为了提高效率,需要对数据进行处理。例如,内存结构将是顶点颜色法线顶点颜色法线。。等等 是否有任何可行的选择来改变,比如说,仅使用某种memset变量(即不使用循环)更改内存的颜色部分 这也带来了一个问题,是否存在循环内存集?例如,在每个由四个浮点数组成的颜色数组中,将它们全部设置为特定的颜色。只需使用循环即可。memset并没有什么神奇之处,它只是在内部使用了一个循环,如果与0一起使用,它可能会在同一个编译器上稍微优化,一次清除64位,但它不会在一条指令中设置一个内存块

有了OpenGL,很多时候为了提高效率,需要对数据进行处理。例如,内存结构将是顶点颜色法线顶点颜色法线。。等等

是否有任何可行的选择来改变,比如说,仅使用某种memset变量(即不使用循环)更改内存的颜色部分


这也带来了一个问题,是否存在循环内存集?例如,在每个由四个浮点数组成的颜色数组中,将它们全部设置为特定的颜色。

只需使用循环即可。memset并没有什么神奇之处,它只是在内部使用了一个循环,如果与0一起使用,它可能会在同一个编译器上稍微优化,一次清除64位,但它不会在一条指令中设置一个内存块

我只会使用循环。memset()对每次迭代编写多个字节进行了一些简洁的优化,因此您可以看看memset()本身是如何工作的,看看这些优化是否适用于您的代码。但最终,这只是一个循环


这是memset()-可读性很好,不过你必须挖掘所有的typedef和宏才能准确地看到优化是如何进行的。

+1,一个愚蠢的
for
循环做同样的事情需要花费大约同样长的时间。这并不总是正确的,有些编译器使用
REP STOS
,这是一条指令,虽然它在内部执行循环。Ok-但它不会通过内存架构中的某些硬件操作在单个时钟周期内清除内存;不过,还有一个函数的实现。