【问题标题】:Whether the io buffer will be automatically emptied when the program crashes?程序崩溃时是否会自动清空io缓冲区?
【发布时间】:2020-03-27 13:58:15
【问题描述】:

说说c++编程,程序崩溃时会不会自动清空IO缓冲区?如果不会,那后面肯定有一些考虑,是什么原因?

cout << "some text";
// here our program crashed unexpected, whether the IO buffer will be automatically cleared?
doSomethingThatCrashTheProgram();

IO缓冲区是共享内存还是每个程序单独分配的空间?

【问题讨论】:

    标签: c++11 io buffer


    【解决方案1】:

    答案在doSomethingThatCrashTheProgram()。如果您无法控制该功能(这似乎不太可能),您的程序可能正在显示某种未定义的行为。

    使用undefined behavior,你在错误的轨道上期待任何东西。程序可能会刷新、清除甚至召唤nasal demons。

    【讨论】:

      【解决方案2】:

      不会的。

      这就是 C stderr 和 C++ cerr IO 通道没有缓冲的原因。这样一来,错误日志语句就会在写入后立即发送给用户,因此以后的崩溃不会隐藏它们。

      如果您有一个核心转储文件,您可以通过足够的努力找到 IO 缓冲区并查看其中的内容。

      不刷新缓冲区的原因很简单:这是一个崩溃!该程序做错了什么并因此而被杀死。操作系统是否应该介入并戳穿可能损坏的程序内存的碎片以找到 IO 缓冲区?问的太多了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2011-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多