- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我的 C# 代码:
const long pSize = 20;
无论我使用 x64 还是任何 CPU 在 Release模式下构建它,我都会得到以下 MSIL 指令:
IL_0010: ldc.i4.s 20
IL_0012: conv.i8
但是,MSIL 有 ldc.i8 指令。如何让编译器使用它?
最佳答案
MSIL has ldc.i8 instruction. How to make compiler to use this?
你不知道。那会是更糟糕的代码。
ldc.i4.s 20
conv.i8
是三个字节的代码:两个用于指令,一个用于常量。鉴于
ldc.i8 20
是九个字节:一个用于指令,八个用于常量。
编译器足够聪明,可以避免六个不必要的字节。请记住,代码的速度可能会受到将其加载到内存中所需的页面错误数量的不利影响;生成代码比需要的代码大三倍与该目标背道而驰。
但是等等,还有更多,而且都不好。
基本代码块越大,它周围的分支就越有可能比紧凑分支指令格式中的要长。这意味着这种去优化可以使分支指令变大,这反过来使它们的基本 block 变大,现在它们周围的分支可能不紧凑,整个事情可以滚雪球。
不仅仅是六个额外的字节;这就是这六个额外字节使其他代码变得更大的结果;您还必须考虑该费用。
编译器做得很好。让它发挥作用。
如果您希望编译器生成更差的代码,可以使用编译器的源代码。如果您出于某种原因确实需要一个反优化编译器,请随意编写一个。
关于c# - 如何强制编译器使用 ldc.i8 IL 指令而不是 ldc.i4 加 conv.i8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40592881/
我想知道为什么这个 C# 代码 long b = 20; 编译为 ldc.i4.s 0x14 conv.i8 (因为它需要 3 个字节,而不是 ldc.i8 20 所需的 9 个字节。有关详细信息,请
我在研究 C# 的中间语言 (IL) 时遇到了以下代码:- //Add.il //Add Two Numbers .assembly extern mscorlib {} .assembly Add
CIL中有ldc.i4.0、ldc.i4.1、ldc.i4.2等加载指令, ldc.i4.3 ... 我想知道,是否可以使用 ldc.i4 1 而不是 ldc.i4.1 或 ldc.i4 5 而不是l
我正在尝试找出一些 CIL 代码。但这似乎这两个陈述做了同样的事情(根据我读过的所有内容)。 ldc.i4 33 和 ldc.i4.33 两者都被认为“将 int32 加载到值 33 的堆栈上”。 这
这是我的 C# 代码: const long pSize = 20; 无论我使用 x64 还是任何 CPU 在 Release模式下构建它,我都会得到以下 MSIL 指令: IL_0010: l
我是 java 字节码世界的新手。我有一些涉及字节码的调试任务。在经历那件事时,我注意到一些看起来可疑的值,但我不确定。这是完整字节码的一部分 // access flags 0x100A pri
ByteCode:ldc pushes a one-word constant onto the operand stack. ldc takes a single parameter, , whic
不同 D 编译器的优缺点是什么?性能和标准合规性/D2 支持如何?调试器的支持程度如何?错误消息有多好以及 IDE 集成如何? 64 位支持有多好?到目前为止我的想法: DMD 成熟且维护良好 只有一
我在哪里可以找到关于 GDC(GNU D 编译器)的规范以及如何重写标准 D 类型,如 uint 等? 有关信息:我对将 D 用于内核和其他低级内容很感兴趣。 谢谢。 最佳答案 您可以遵循 D ABI
我在哪里可以找到关于 GDC(GNU D 编译器)的规范以及如何重写标准 D 类型,如 uint 等? 有关信息:我对将 D 用于内核和其他低级内容很感兴趣。 谢谢。 最佳答案 您可以遵循 D ABI
我对任何形式的 C 编程都是新手。 我有一个带有液晶屏(矩阵轨道LK204-7T-1U-USB-WB)的PLC(Teso PC1620)(使用rabbit处理器)。我正在尝试使用 LCD 内置的水平条
我正在用 ASM 编写一个程序,它使用 Tree API 将字节码添加到某些方法中。我已经使用 ASMifier 生成创建特定方法所需的代码,但我在使用以下行时遇到了一些问题: mv.visitLdc
我是一名优秀的程序员,十分优秀!