+ -
当前位置:首页 → 问答吧 → 一个超大的数组,如何快速给每个元素赋一个相同的值

一个超大的数组,如何快速给每个元素赋一个相同的值

时间:2011-07-29

来源:互联网

现在有两个数组
byte color[MAX_SIZE][3];
double depth[MAX_SIZE];
我在模仿opengl的渲染管线,glclear清除时要设置这两个数组为特定值,其规模可达到百万以上(1000*1000个像素)
如何快速的赋值?
我原本做法是指针加for循环了,后来想到memcpy很快,我就用了一种二分拷贝的方法,即先给第一个元素赋值,然后将1拷贝至2,1、2拷贝至3、4, 1、2、3、4拷贝至5、6、7、8......
就像这样
void glbufClearColorBuffer(double *v)
{
byte* first=(byte*)color,*p=(byte*)color;
int cpcnt=1,cnt=bufLineWidth*(bufT-bufB);

*p++=255*v[0];*p++=255*v[1];*p++=255*v[2];

while((cpcnt<<1)<=cnt)
{
memcpy(p,first,cpcnt*3);
p+=cpcnt*3;
cpcnt<<=1;
}
if(cpcnt<cnt)
memcpy(p,first,3*(cnt-cpcnt));
}
结果收效甚微。。。
大家有什么其他方法么?

作者: irontemp15   发布时间: 2011-07-29

memset()如何?

作者: laciqs   发布时间: 2011-07-29

引用 1 楼 laciqs 的回复:
memset()如何?

memset是给每个字节赋值吧?

作者: irontemp15   发布时间: 2011-07-29

引用 2 楼 irontemp15 的回复:
引用 1 楼 laciqs 的回复:
memset()如何?

memset是给每个字节赋值吧?

可以为其他类型数组赋值的。

作者: laciqs   发布时间: 2011-07-29

C/C++ code

memset(color, 1, sizeof(color));
memset(depth, 1, sizeof(depth));


这样应该就都赋1了。

作者: laciqs   发布时间: 2011-07-29

额。。 不是这样吧 memset是逐字节赋值,指针传进去就丢失了类型信息吧?

作者: irontemp15   发布时间: 2011-07-29