gpt4 book ai didi

c# - 编译Release和Debug是不是要生成不同的IL代码+不同的机器码?

转载 作者:太空狗 更新时间:2023-10-29 17:36:56 25 4
gpt4 key购买 nike

我听说在 Release 模式下编译会生成比在 Debug 模式下优化的代码,这很好。

但这是 IL 中的优化吗?一旦 CLR 运行它,它是否在机器代码中? Release 和 Debug 编译的 PE 的元数据结构有区别吗?

谢谢

最佳答案

在发布版本中构建为 C# 编译器打开/optimize 编译选项。这有一些副作用,IL 确实发生了变化,但变化不大。值得注意的是,编译器不再努力使代码完全可调试。例如,它跳过一个空的静态构造函数,它不再发出允许您在花括号上设置断点的 NOP 操作码,并允许具有不同作用域的局部变量在堆栈帧中重叠。小东西。

最重要的区别是为程序集发出的 [Debuggable] 属性,其 IsJITOptimizerDisabled 属性为 false。

这会打开真正的 优化器,即内置在抖动中的优化器。您会在 this answer 中找到它执行的优化列表。 .请注意这种方法的用处,任何语言都受益于在抖动中使用代码优化器而不是编译器。

简而言之,IL 的变化非常小,生成的机器代码的变化非常大。

关于c# - 编译Release和Debug是不是要生成不同的IL代码+不同的机器码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751929/

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