【问题标题】:In what logical segments of the processes do the variables exist?变量存在于流程的哪些逻辑段中?
【发布时间】:2021-06-11 08:19:32
【问题描述】:

"进程的哪些逻辑段 变量 f 和 c 存在吗?”

int c = 5;
    void main(int argc, char **argv)
    {
        int f = fork();
        if(f == 0)
        {
            c += 5;
        }
        else
        {
            f = fork();
            c += 10;
            if(f)
            {
                c += 5;
            }
        }
    }

大家好,我有点卡在这个问题上,我猜 c 是一个全局变量并且在数据区域中并且 f 在堆栈中(因为 main 是一个过程调用),但我不清楚关于逻辑段的含义。我将非常感谢专家的眼睛来查看这个问题并告诉我我缺少什么。提前致谢。

【问题讨论】:

  • 我认为这个问题不一定值得两次反对,但如果代码被格式化为可读性会有所帮助。我假设逻辑段的含义将在您学习的任何课程中进行解释,因为确切的含义可能会有所不同。然而,最常见的选项选择可能是文本/代码、数据、(可能是 bss)堆栈和堆。
  • 答案不是特定于 C 语言,而是特定于目标架构。也许克林贡(或量子)计算机具有 POSIX 兼容性:-)

标签: c process global-variables fork instance-variables


【解决方案1】:

初始c 变量仅存在于主进程中(在f == 0 分支中)。每次 fork 时,它都会被克隆,但每个进程都有自己的 c 变量副本。

看到这个答案https://stackoverflow.com/a/4299626/3035795

如你所说,全局变量存储在数据段中,所以答案是c存在于数据段中,f存在于堆栈段中。

https://stackoverflow.com/a/14588866/3035795

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多