我有一个函数,可以将位图字符串写入浏览器,然后将其打印在屏幕上。目前,这是通过单独为每个像素生成正确的值并为每个像素使用 write(int fd, char *Buff, int NumBytes) 函数三次来实现的,例如:
for (i = 0; i < IMAGE_HEIGHT; ++i)
{
for (j = 0; j < IMAGE_WIDTH; ++j)
{
blue = blue();
green = green();
red = red();
write(soc, &blue, 1);
write(soc, &green, 1);
write(soc, &red, 1);
}
}
我想要优化代码,并认为多次调用 write() 函数肯定会让我付出一些代价。因此,我们的想法是将所有值存储在字符数组中,然后调用 write 函数一次:
write (soc, image_array, sizeof(image_array));
但是我会遇到巨大的数组(数百个数千/数百万个元素)的问题吗?只需分配到堆就能解决这个问题吗?我只是想确保我没有做任何愚蠢的事情。
最佳答案
是的,多次写入会伤害你。
我建议写入一个小缓冲区(可能几KB)并在每次填满时写入,而不是单独写入每个字节或分配整个字节。这应该会以较小的内存成本为您带来良好的性能提升。
关于c - 这会导致堆栈出现问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068328/