是否可以同时 运行 相同的 C++ 代码?
Would it be possible to run the same C++ code simultaneously?
假设我编译了一些代码并使其成为 运行。完成需要 10 分钟。
与此同时,如果我更改代码中的一些参数并使用单独的终端window和运行再次编译它(所以现在有两个程序运行ning同时使用相同的代码),第二个 运行 是否会影响第一个 运行ning 程序,因为第一个编译输出被第二个编译输出替换?
此行为未由 C++ 标准定义。通常,会发生以下两种情况之一(主要取决于操作系统)
第二次编译将失败,因为链接器将无法打开可执行文件来写入它。
编译将成功,原始可执行文件的现有调用将不受影响;以后的调用将使用新的可执行文件。
第三种可能性——编译成功,并打乱了现有的调用——在现代操作系统中是闻所未闻的。
唯一合理的答案是该行为完全取决于操作系统:C++ 标准没有尝试描述可能发生的情况。
您的操作系统供应商可能会扩展记录或指定行为的常见礼貌,但我从未见过此类文档。
最好不要尝试这样做。
我是一只老猫,这里有一些感想。由于文件锁定,您不太可能在 Windows 上执行此操作。在 Sun 工作站上,这是可能的,但一旦您将程序编译到与 运行 可执行文件相同的位置,该程序似乎根本无法正常工作。好吧,当我在大学使用预先标准化的 C++ 时,情况确实如此。它只是表现得很奇怪,没有任何解释。在 rhel 上,它似乎特别适用于小程序。
存在三种可能的情况:
在 Windows 上,可执行文件在执行时将被锁定以进行写入和删除,因此构建将失败。
在 Linux 上,可执行文件在执行时不需要受到修改或删除保护。
2.1。如果从文件系统中删除一个文件,然后创建一个具有相同名称的新文件,那么旧文件内容将仍然存在,直到已经 运行ning 可执行文件退出,而新的可执行文件将使用新文件。因此,旧的可执行文件将继续 运行 正常,而新的可执行文件也将准备好工作。
2.2。如果打开文件进行写入并用新内容覆盖,则已经 运行ning 的可执行文件将使用新的机器代码,这很可能与现有程序状态不兼容并会导致崩溃。
假设我编译了一些代码并使其成为 运行。完成需要 10 分钟。
与此同时,如果我更改代码中的一些参数并使用单独的终端window和运行再次编译它(所以现在有两个程序运行ning同时使用相同的代码),第二个 运行 是否会影响第一个 运行ning 程序,因为第一个编译输出被第二个编译输出替换?
此行为未由 C++ 标准定义。通常,会发生以下两种情况之一(主要取决于操作系统)
第二次编译将失败,因为链接器将无法打开可执行文件来写入它。
编译将成功,原始可执行文件的现有调用将不受影响;以后的调用将使用新的可执行文件。
第三种可能性——编译成功,并打乱了现有的调用——在现代操作系统中是闻所未闻的。
唯一合理的答案是该行为完全取决于操作系统:C++ 标准没有尝试描述可能发生的情况。
您的操作系统供应商可能会扩展记录或指定行为的常见礼貌,但我从未见过此类文档。
最好不要尝试这样做。
我是一只老猫,这里有一些感想。由于文件锁定,您不太可能在 Windows 上执行此操作。在 Sun 工作站上,这是可能的,但一旦您将程序编译到与 运行 可执行文件相同的位置,该程序似乎根本无法正常工作。好吧,当我在大学使用预先标准化的 C++ 时,情况确实如此。它只是表现得很奇怪,没有任何解释。在 rhel 上,它似乎特别适用于小程序。
存在三种可能的情况:
在 Windows 上,可执行文件在执行时将被锁定以进行写入和删除,因此构建将失败。
在 Linux 上,可执行文件在执行时不需要受到修改或删除保护。
2.1。如果从文件系统中删除一个文件,然后创建一个具有相同名称的新文件,那么旧文件内容将仍然存在,直到已经 运行ning 可执行文件退出,而新的可执行文件将使用新文件。因此,旧的可执行文件将继续 运行 正常,而新的可执行文件也将准备好工作。
2.2。如果打开文件进行写入并用新内容覆盖,则已经 运行ning 的可执行文件将使用新的机器代码,这很可能与现有程序状态不兼容并会导致崩溃。