【问题标题】:c++ fork() and address spacec++ fork() 和地址空间
【发布时间】:2014-04-22 19:29:26
【问题描述】:

在这里完成 GNU fork() noob。我需要派生 N 个将做完全相同的事情的进程:分配 2 个数组,初始化它们并处理数据。我尝试了可以​​简单压缩成的代码:

int main()
{
    int a = 0;
    double b = 0;

    double *a1, *a2;

    fork();

    a1 = new double[10];
    a2 = new double[10];

    // initialize and process data in a1 and a2 using an algorithm involving a and b.
}

就为每个进程创建a1a2 的副本以及ab 的副本而言,我的fork() 是否在正确的位置?或者ab 的声明和/或初始化应该在fork() 调用之后?每个进程都应该有自己的a, b, a1 and a2

【问题讨论】:

  • this question 的近似副本。见this answer。您应该始终保留并测试 ​​fork(2) 的结果
  • 是的,我可以花几个月或几年的时间研究内核内部结构,或者从知识渊博的人那里得到一个提示,然后开始解决眼前的问题,值得花几分钟的时间来写- 离开代码。你的答案是“长”的,它是正确的。但这不是我需要的。是否有一个“简短”的答案:fork() 调用的位置重要吗?请多投反对票!打新人!

标签: c++ fork gnu


【解决方案1】:

进程的地址空间总是不同的,即使它们处于父子关系。

【讨论】:

  • a1 和 a2 在每个进程中没有指向相同的位置。
  • 不确定这意味着什么 - 回答和评论。关于我的问题,什么是“亲子关系”?地址空间不同是什么意思?
猜你喜欢
  • 1970-01-01
  • 2019-01-26
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2016-07-20
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多