#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include <cstdio>
int main( )
{
char pbuffer[BUFSIZ];
setbuf(stdout, pbuffer);
cout << "hello cout" ;
sleep(5);
cerr << "hello cerr";
sleep(5);
cout << "\nAll done " << endl;
sleep(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我编译并运行上面的程序之后,它的输出是:
hello couthello cerr
All done
Run Code Online (Sandbox Code Playgroud)
但我认为它应该是:
hello cerrhello cout
All done
Run Code Online (Sandbox Code Playgroud)
我想知道,为什么要cerr冲洗缓冲区cout?
我在Windbg中调试以下C程序:
int main()
{
size_t size = 500*1024*1024;
void *p = malloc(size);
memset(p, 'a', size);
printf("%p", p);
}
Run Code Online (Sandbox Code Playgroud)
我使用:cl/Zi leak.c编译程序,并生成了一个leak.exe.
我在printf行设置了一个断点.我运行以下命令:
0:000> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 21 5f0f6000 ( 1.485 Gb) 74.27%
Heap 3 1f501000 ( 501.004 Mb) 95.07% 24.46%
<unknown> 39 1436000 ( 20.211 Mb) 3.84% 0.99%
Image 35 300000 ( 3.000 Mb) 0.57% 0.15%
MappedFile 4 182000 ( 1.508 Mb) 0.29% 0.07%
Stack 3 100000 ( 1.000 Mb) …Run Code Online (Sandbox Code Playgroud)