我有几个问题.任何输入都表示赞赏.谢谢.
这是我的理解:
是.
所有内存都被复制,所以你没有遇到麻烦.
是.
这两个进程都保留了所有打开文件流的副本.(默认情况下,有一些fork选项可以改变这一点我认为.)fork之后打开的流不是共享的.
首先,请注意此行为与平台有很大关系.如果你要求除了好奇心之外的其他任何事情,我建议你重新考虑一下你的设计吗?
也就是说,fork所保留和未保存的内容由POSIX标准指定.如何解释这个C++取决于你的C++(用户空间)运行时是如何实现的.
文件流是一个有趣的案例.底层文件描述符将被克隆,因此两个进程都将具有一个打开的描述符.但是用户空间缓冲区(如果有的话)很可能会重复.所以,例如:
std::cout << "Hello!";
fork();
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
...有很好的机会打印Hello!两次,只是因为缓冲区将被复制(以及进程的地址空间中的所有其他内容).
简而言之,我会回答你的问题:
这取决于班级以及"生存"的意思.
它通过复制进程的整个虚拟地址空间等来实现.
指针保持其价值,并指出它们的重复.(这是"懒洋洋地"完成的;即"写入时复制",因此它不像它听起来那么低效)
(re:文件流)见上文.
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |