gpt4 book ai didi

c# - ldc.i4.s 和 ldc.i4 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 09:01:09 24 4
gpt4 key购买 nike

我在研究 C# 的中间语言 (IL) 时遇到了以下代码:-

//Add.il
//Add Two Numbers

.assembly extern mscorlib {}

.assembly Add
{
.ver 1:0:1:0
}
.module add.exe

.method static void main() cil managed
{
.maxstack 2
.entrypoint

ldstr "The sum of 50 and 30 is = "
call void [mscorlib]System.Console::Write (string)

ldc.i4.s 50
ldc.i4 30
add
call void [mscorlib]System.Console::Write (int32)
ret
}

我是了解 IL 的初学者,但我知道上面示例中 Main 中使用的这些非常基本的指令的含义。

我的问题是,用于加载50的指令ldc.i4.s和用于加载50的指令ldc.i4有什么区别吗? 30 进入评估堆栈。

编译器如何决定使用哪条指令(从这两条指令中选择)以及何时使用?

最佳答案

对于带符号的字节值,没有。

ldc.i4.s is a more efficient encoding for pushing the integers from -128 to 127 onto the evaluation stack.

参见 MSDN

关于c# - ldc.i4.s 和 ldc.i4 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519951/

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