我经常在开发过程中遇到这种情况,我在其中运行一个二进制文件,a.out
在后台说,因为它需要很长时间。在这样做的同时,我对产生a.out
并a.out
再次编译的C代码进行了更改。到目前为止,我还没有遇到任何问题。正在运行的进程将a.out
继续正常运行,不会崩溃,并且始终运行最初启动时的旧代码。
但是,a.out
据说文件很大,可能相当于RAM的大小。在这种情况下会发生什么?并说它链接到共享对象文件,libblas.so
如果我libblas.so
在运行时进行修改怎么办?会发生什么?
我的主要问题是-操作系统是否保证当我运行时a.out
,原始代码将始终按照原始二进制文件正常运行,而不管二进制.so
文件或链接到的文件的大小如何,即使这些文件.o
和.so
文件在运行期间被修改运行?
我知道有一些问题可以解决类似的问题:https : //stackoverflow.com/questions/8506865/when-a-binary-file-runs-does-it-copy-its-entire-binary-data-into-memory -at-once 如果在执行过程中编辑脚本会怎样? 程序运行时如何进行实时更新?
哪些方法帮助我进一步了解了这一点,但我认为他们并没有确切地问我想要什么,这是执行期间修改二进制文件的后果的一般规则
if they are read-only copies of something already on disc (like an executable, or a shared object file), they just get de-allocated and are reloaded from their source
,所以我给人的印象是,如果您的二进制文件很大,那么如果您的二进制文件的一部分耗尽了RAM,但是又需要它,则它是“从源代码重新加载”的-因此,该.(s)o
文件将在执行期间反映出来。但是,当然我可能会误解了-这就是为什么我要问这个更具体的问题
No, it only loads the necessary pages into memory. This is demand paging.
所以我实际上给人的印象是我不能保证所要求的。