none
纯32位平台的程序允许的最大的局部变量是多大啊?(内详) RRS feed

  • 问题

  • 情况是这样的,我打算编一个利用LZO库,对一个文件的所有数据进行解压然后转到另一个文件。那个解压函数的四个参数,源buffer地址,源buffer长度,目的buffer地址(前三个参数由你给),目的buffer长度(由函数返回)。函数的功能就是把源buffer转成目的buffer。现在我要处理的文件的大小大概在1.6到2.0MB的范围内。我想问一下,我在设置buffer的时候,打算用 char inbuffer[]数组来传(我在MSDN上看到的读写文件用的参数就是用数组的),为最大限度的减少读写文件的次数,这个数组应该设的越大越好。但我记得好象程序对局部变量的大小有限制的吧,好象越了界就会报段错误(从书上看到的)。 所以不知道这个数组到底应该设多大。

    那个源buffer长度和目的buffer长度的对应关系我不太知道。但是我看过有个程序能把1.6MB的文件搞成3MB多的,所以不知道到底怎么设比较好,既要尽可能的快,还要保险。各位可否给个建议啊?


    凝气神通
    2009年5月4日 15:16

答案

  • 你好!
         局部变量分配在栈空间里,这个栈空间有大小限制(大约是1M),如果你分配的局部变量太大,就溢出了!
         实际上也并不是读写文件次数越少性能就越好,你的数组太大会占用大量的内存,这样性能反而下降了,这是一个平衡的问题!一般使用4K左右作为缓冲比较好些!
    周雪峰
    2009年5月5日 0:24
    版主