当我阅读有关操作系统中的进程和线程的来源时,我遇到了这句话,这对我来说听起来很奇怪:
When a program is executed and handled by the processor, it converts into a process. A process needs to use the data and code segment in the memory.
我认为第一句自然是真的。但是,我无法理解为什么这个过程只需要使用数据和代码段?
#include <stdio.h>
x = 10;
y;
int main(void){
int *array = (int*)malloc(sizeof(int) * 4);
printf("x and y are %d %d", x, y);
return 0;
}
我认为在执行此代码时,生成的进程使用bss,数据,堆和代码段。在我看来,一个过程可以从内存的任何部分中受益。
如果我的想法错了,有人可以解释原因吗?
答案 0 :(得分:1)
进程必须存储在内存中:
除了非常微不足道的,程序将使用所有这些细分。看看wikipedia's explanation of what the segments contain。
我认为在句子中,作者并不想详细说明并将堆栈/堆/数据/ BSS称为程序的数据,而不是实际的数据段。
答案 1 :(得分:0)
此声明不正确。
当程序由处理器执行和处理时,它将转换为进程。进程需要使用内存中的数据和代码段。
在执行程序之前必须存在进程。在许多非太监系统中,单个过程运行多个程序。
我认为在执行此代码时,生成的进程使用bss,数据,堆和代码段。在我看来,一个过程可以从内存的任何部分中受益。
LINKER deine计划细分。加载器遵循链接器的指令来创建地址空间。
&#34; bss,数据,堆和代码&#34;设想地址空间是一种糟糕的方式。
有:
堆和堆栈只是读/写数据。操作系统甚至无法判断哪些数据是堆栈,哪些是堆。这只是记忆。