当您调用printf打印到终端时,标准库将使用行缓冲并等待换行符写入输出。大小取决于实现(可能是 8K)。请参阅:在 C 中,stdout 缓冲区的大小是多少?
。但这种内存使用量不会随着时间的推移而增加。
当写入时(通过write系统调用),缓冲区将通过pipes 和ptys 复制到终端模拟器中,然后将其显示在屏幕上。除了scrollback终端仿真器的缓冲区之外,它不会在这条路径上的任何地方累积。
大多数终端模拟器对回滚缓冲区都有限制,默认为几千行。在此限制之后,旧线路可能会被取消分配。一些终端模拟器提供了删除限制的选项,这意味着它可能会增长直到 OOM(我相信在 macOS 上,终端应用程序实际上会处理此事件以清除回滚缓冲区),并且终端模拟器可能会被 OOM 杀手杀死。从操作系统的角度来看,它与任何其他进程间通信没有什么不同。
容器可能只影响管道的创建。它仍然是调用 的进程printf,通过内核将生成的缓冲区发送到终端仿真器进程。
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |