gpt4 book ai didi

c++ - 编译器可以生成自修改代码吗?

转载 作者:行者123 更新时间:2023-12-01 13:57:32 27 4
gpt4 key购买 nike

通常说一个 static变量初始化包含在 if 中以防止它被多次初始化。
对于这个和其他一次性条件,让代码在第一次通过自我修改后删除条件会更有效。
是否允许 C++ 编译器生成此类代码,如果不允许,为什么?听说可能对缓存有负面影响,但不知 Prop 体情况。

最佳答案

没有什么可以阻止编译器实现您的建议,但它是一个非常小的性能问题的相当重量级的解决方案。
为了实现自修改代码,对于在 Windows 或 Linux 上运行的典型 C++ 实现,编译器必须插入会更改代码页上的权限的代码,修改代码,然后恢复权限。与隐含的“if”操作将接管程序的生命周期相比,这些操作很容易花费更多的周期。
这也会导致阻止修改后的代码页在进程之间共享。这似乎无关紧要,但编译器通常会悲观他们的代码(在 i386 的情况下非常糟糕),以便实现可以在运行时加载不同地址的位置无关代码,而无需修改代码并防止共享代码页。
正如 Remy Lebeau 和 Nathan Oliver 在评论中提到的那样,还需要考虑线程安全问题,但它们可能会被处理,因为有各种热补丁可执行文件的解决方案,例如此类。

关于c++ - 编译器可以生成自修改代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63568992/

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