我试图了解如何在 C 程序中管理内存。我知道内存中有以下段:
现在考虑以下程序:
#include <stdio.h>
int main(){
int arr[4] = {1,2,3,4};
int x = 10;
printf("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中, arr 和 x 都是在 main 函数中局部声明的。我认为这意味着它们都将在函数堆栈上分配空间。但是,当我在 linux 上运行 size 命令时,我发现数组实际上是在数据段中分配了空间。
我在网上搜索过这个,但发现了相互矛盾的信息。一些答案说所有本地声明的变量都应该进入堆栈,而其他人说数组应该进入堆。我认为如果我使用 malloc 动态分配内存,数组会进入堆,在这个例子中不是这种情况。
您好,我是学习系统调用的新手。我目前正在学习 fork() 和 wait() 系统调用。我知道 fork() 创建一个新的子进程。让我困惑的是 wait() 调用。
到目前为止,我的理解是:
(1)当一个进程死亡时,它会进入“僵尸状态”,即它不会释放其PID,而是等待其父进程确认子进程已死亡,然后释放PID
(2) 所以我们需要一种方法来确定子进程何时结束,以便我们不会让任何进程处于僵尸状态
我对以下事情感到困惑:
(1) 当运行一个 C 程序时,我派生了一个新的子进程,如果我不显式调用wait(),当子进程结束时它是在内部完成的吗?因为您仍然可以用 C 语言编写一段代码,在其中运行 fork() 而无需 wait(),并且它似乎工作正常?
(2) wait() 的作用是什么?我知道它返回已终止的子进程的 PID,但这对于释放已终止进程的 PID 有什么帮助/相关呢?
我很抱歉提出这样幼稚的问题,但这是我真的很好奇的事情,而且我在网上找不到任何好的资源!非常感谢您的帮助!