在OJ上做输入输出量很大的题时,在main()函数开头加两句:(在C中改用malloc(1 << 20)效果相同)
1 2 |
setvbuf(stdin, new char[1 << 20], _IOFBF, 1 << 20); setvbuf(stdout, new char[1 << 20], _IOFBF, 1 << 20); |
通过创建一个足够大的输入输出缓冲区,可以减少IO操作的频率,提高IO性能。在实际测试中最多达到了300%的性能提升。 这样看起来似乎有内存泄漏,但由于缓冲区的使命完成之时便是程序结束之时,程序结束时该段内存自然被释放,所以并不必担心内存泄漏。实际上,如果提前对该块内存进行delete[] 操作,是会造成运行时错误的。
回复