最佳答案
当您调用 printf
为了打印到终端,标准库将使用行缓冲并等待换行符写入输出。大小将取决于实现(可能是 8K)。见:In C, what's the size of stdout buffer?
.但是这种内存使用量不会随着时间的推移而增长。
写入时(通过 write
系统调用),缓冲区将通过 pipe
复制。 s 和 pty
s 最终出现在终端仿真器中,然后将其显示在屏幕上。除了 scrollback
终端仿真器的缓冲区,它不会沿此路径累积。
大多数终端仿真器都会有回滚缓冲区的限制,默认为几千行。在此限制之后,旧行可能会被释放。一些终端模拟器提供了删除限制的选项,这意味着它可能会增长直到 OOM(我相信在 macOS 上,终端应用程序实际上会处理此事件以清除回滚缓冲区)并且终端模拟器可能会被 OOM-killer 杀死。从操作系统的角度来看,它与任何其他进程间通信没有什么不同。
容器可能只会影响管道的创建。它仍然是调用 printf
的进程。 ,通过内核将生成的缓冲区发送到终端仿真器进程。
关于terminal - 打印到终端会导致 OOM(内存不足)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816658/