gpt4 book ai didi

c - 是否所有程序代码都加载到 text\code section\segment 内存中

转载 作者:IT王子 更新时间:2023-10-28 23:38:02 26 4
gpt4 key购买 nike

我已经开始研究 c 编程,虽然我不是一个完全的初学者(我有 java 和 web 开发的知识),但有很多东西我不明白。

我的问题是关于程序何时首次加载到内存中。我无法理解这里实际发生的情况。

是在程序启动时将所有程序代码加载到内存中,还是仅加载需要的代码?

在此之后,这些代码\指令集是否会随着进程获得 CPU 时间而被换入和换出物理磁盘,或者在程序运行时加载的代码是否保留在内存中?

如果两个进程可以共享同一组指令,这是否意味着每个进程在其虚拟内存空间中都有一个单独的代码段?

如果我的问题是基本的或措辞不佳,我很抱歉,但我是上周才开始看这个的,经过一个周末的阅读,我的问题远多于答案!

最佳答案

Is all of the program code loaded into memory when the program is launched or is only what is needed loaded in?

大多数现代操作系统会“按需”加载,因此操作系统会加载应用程序的起点(main),然后操作系统就会从那里启动。当应用程序跳转到一段尚未在内存中的代码时,它会加载该位。

After this does this code\set of instructions get swapped in and out of the physical disk as the process gets CPU time or does loaded code stay in memory whilst the program is running?

如果操作系统决定需要一些内存,它可能会丢弃一些代码,并在以后需要时重新加载它[如果它再次需要 - 如果它是初始化的一部分,它可能永远不会得到再次击中]。

If two processes can share the same set of instructions does this mean each process gets a separate code section in its virtual memory space?

当然可以在同一应用程序的多个副本之间共享代码。同样,特定操作系统是否执行此操作取决于操作系统。 Linux 肯定会在两个(不相关的)进程之间共享来自同一应用程序的代码副本[显然,一个 fork 的进程根据定义共享代码]。我相信 Windows 也可以。

共享库(分别用于 Linux/Unix 和 Windows 的“.so”和“.dll”文件)也用于在进程之间共享代码 - 同一个共享库用于许多不同的应用程序。

每个应用程序的数据空间当然是分开的,共享库也将在每个共享库的进程中获得自己的数据部分。

关于c - 是否所有程序代码都加载到 text\code section\segment 内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16648088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com