c - 这会导致堆栈出现问题吗?

标签 c optimization stack-overflow

我有一个函数,可以将位图字符串写入浏览器,然后将其打印在屏幕上。目前,这是通过单独为每个像素生成正确的值并为每个像素使用 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/

相关文章:

c++ - 非递归二叉树插入()方法不起作用

c - 递归查找数组的最大元素

c - 靶心覆盖率,代码覆盖率为 0%

c - 优化/更好地编写函数代码并使用其返回值

c++ - 什么是更好地在数组中插入值,然后在保持排序顺序的同时进行排序或插入?

c - 该机器代码如何防止缓冲区溢出?

java - 什么是堆栈溢出错误?

c++ - 多线程环境中的 Linux 高分辨率计时器?

r - R中重启、优化的累积和

c# - 当我只能生成其他可观察对象时,如何从起始可观察对象生成可观察对象?