Terminal 打印到终端是否会导致OOM(内存不足)? 打印到终端如何影响内存使用?它会一直消耗内存直到OOM吗 在码头集装箱里怎么样 操作系统如何处理打印到终端的内存 操作系统是否在某一点刷新终端

Terminal 打印到终端是否会导致OOM(内存不足)? 打印到终端如何影响内存使用?它会一直消耗内存直到OOM吗 在码头集装箱里怎么样 操作系统如何处理打印到终端的内存 操作系统是否在某一点刷新终端,terminal,printf,Terminal,Printf,当您调用printf打印到终端时,标准库将使用行缓冲并等待换行符写入输出。大小将取决于实现(可能是8K)。请参阅:。但这种内存使用不会随着时间的推移而增长 写入时(通过writesyscall),缓冲区将通过pipes和ptys复制到终端仿真器中,然后在屏幕上显示。除了终端仿真器的回滚缓冲区外,它不会沿着此路径累积 大多数终端模拟器对回滚缓冲区都有一个限制,默认为几千行。旧线路可能会在该限制后被解除分配。一些终端仿真器提供了一个删除限制的选项,这意味着它可能会增长到OOM(我相信在macOS上,

当您调用
printf
打印到终端时,标准库将使用行缓冲并等待换行符写入输出。大小将取决于实现(可能是8K)。请参阅:。但这种内存使用不会随着时间的推移而增长

写入时(通过
write
syscall),缓冲区将通过
pipe
s和
pty
s复制到终端仿真器中,然后在屏幕上显示。除了终端仿真器的
回滚
缓冲区外,它不会沿着此路径累积

大多数终端模拟器对回滚缓冲区都有一个限制,默认为几千行。旧线路可能会在该限制后被解除分配。一些终端仿真器提供了一个删除限制的选项,这意味着它可能会增长到OOM(我相信在macOS上,终端应用程序实际上会处理此事件以清除回滚缓冲区),并且终端仿真器可能会被OOM杀手杀死。从操作系统的角度来看,它与任何其他进程间通信都没有区别


容器只能影响管道的创建。它仍然是调用
printf
的进程,通过内核将生成的缓冲区发送到终端仿真器进程。

如果打印时没有换行符,并且控制台配置为只在一个换行符之后显示某个换行符,则最终填充内部缓冲区,直到某个换行符“给出”。这取决于终端(是一个bug,但有些程序有bug)。这个()不是100%相关的,但我很好奇OMM内存问题的不同来源,这些问题使操作系统扼杀了我的工作。