- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在检查捕获 lambda 的 kotlinc
字节码。并试图理解生成的字节码具有 nop
指令的原因。
kotlinc -jvm-target 1.6 .
private inline fun lambdaCapturing(f: () -> Int): Int = f()
fun main(args: Array<String>) {
lambdaCapturing { 42 }
}
结果我得到了
public final class x.y.z.LambdaCaptKt {
private static final int lambdaCapturing(kotlin.jvm.functions.Function0<java.lang.Integer>);
Code:
0: ldc #8 // int 0
2: istore_1
3: aload_0
4: invokeinterface #14, 1 // InterfaceMethod kotlin/jvm/functions/Function0.invoke:()Ljava/lang/Object;
9: checkcast #16 // class java/lang/Number
12: invokevirtual #20 // Method java/lang/Number.intValue:()I
15: ireturn
public static final void main(java.lang.String[]);
Code:
0: aload_0
1: ldc #29 // String args
3: invokestatic #35 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
6: iconst_0
7: istore_1
8: iconst_0
9: istore_2
10: nop
11: nop
12: nop
13: return
}
在 main 函数中有几个 nop
指令。
如果我用 -Xno-optimize
编译相同的代码片段,main
函数看起来像
public static final void main(java.lang.String[]);
Code:
0: aload_0
1: ldc #29 // String args
3: invokestatic #35 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V
6: nop
7: iconst_0
8: istore_1
9: nop
10: iconst_0
11: istore_2
12: bipush 10
14: nop
15: goto 18
18: invokestatic #41 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
21: checkcast #16 // class java/lang/Number
24: invokevirtual #20 // Method java/lang/Number.intValue:()I
27: nop
28: goto 31
31: pop
32: return
还有nop
。
nop
的原因是什么? (调试信息/...)nop
?最佳答案
nop
的原因Kotlin 编译器发出的字节码中的 s 是调试器在右大括号处放置断点的可能性,即在函数或 if
的最后一条语句之后。 - 条款和其他条款,并使其有可能进入这些位置。这样做需要字节码中存在一条指令,该指令也标有行号。
一些 nop
如果 s 是多余的,例如当最后一条语句指令之后已经有一个有效指令时,s 就会被优化掉。
关于 Kotlin 编译器 : `nop` s in bytecode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59650925/
我在 C++ 中使用 rdtsc 为多个 NOP 指令和单个 NOP 指令计时.但是,我没有发现执行 NOP 所需的周期数与执行的 NOP 数量成正比。我很困惑为什么会这样。我的 CPU 是 Inte
有人知道有任何在线资源可以提供 NOP 操作码的指令替代吗? 例如“xchg axe,ax”之类的。我很确定也有一个工具,有人可以给我指出那个方向吗? 最佳答案 一些 shellcode 引擎包含 n
Apparently ,现代处理器可以判断您是否做了一些愚蠢的事情,例如将寄存器移动到自身 ( mov %eax, %eax ) 并将其优化。为了验证该声明,我运行了以下程序: #include #
在 Windows 中,是否可以将 __asm nop 换成 asm volatile("nop");(在 GCC 编译器中使用)并产生相同的结果? 我读过 volatile()(在 GCC 中)保证
从我通常的 VC++ 领域冒险进入 GCC 的世界(通过 MINGW32)。试图创建一个主要由 NOP 组成的 Windows PE,ala: for(i = 0; i < 1000; i++) {
我想在 linux 内核模块中实现非忙等待机制以创建纳秒级延迟。 现在我正在看函数 ndelay(ns); 但是https://www.kernel.org/doc/Documentation/tim
我使用 ILGenerator 生成一些 IL,这是我的代码: DynamicMethod method = new DynamicMethod("test", null, Type.EmptyTyp
想知道空表达式的计算结果是否为 NOP 或者它是否依赖于编译器。 // Trivial example int main() { ;; } 最佳答案 它依赖于编译器,但可观察到的行为必须是没有
我找不到一个很好的来源来回答这个问题。我知道 nop sled 是一种用于在缓冲区溢出攻击中规避堆栈随机化的技术,但我无法理解它是如何工作的。 说明此方法的简单示例是什么? 128 字节 nop sl
当我用 Visual Studio 编写 C/C++ 时,我经常使用 __asm nop; 命令插入 noop 代码,以便有一些东西可以中断。例如: if (someCondition()) {
我偶然发现了这个,我有点困惑。 我有一个现成的VS 2010 F#项目,具有所有默认设置,目标是.NET 4.0。 F#代码如下所示: let test(a:int, b:int, c:int) =
我想知道汇编中的“语义 NOP”是什么? 最佳答案 代码不是实际的 nop,但不会影响程序的行为。 在 C 语言中,以下序列可以被视为语义 NOP: { // Since none of th
我正在查看 MSIL 并注意到有很多 nop MSIL 中的说明。 MSDN 文章称,如果操作码被修补,它们不会采取任何操作,而是用于填充空间。它们在调试版本中的使用比发布版本中的使用要多得多。 我知
我正在 VS2010 beta2 中使用 F#,由于我是 F# 新手,我只是选择了一个常见示例,然后继续实现阶乘函数,如下所示: let rec factorial n = if n <= 1 t
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在编写一个程序来确定每秒可以运行多少个 NOP,但我得到的数字似乎非常小。 int main() { struct timeval tvStart, tvDiff, tvEnd;
我正在开发 nop 商业商店 (3.50)。我有一个要求,当用户点击我的信息网站上提供的链接时,他将被重定向到 nop 商务网站。我想将登录的用户信息从该站点传递到 nop commerce stor
我编写了一个基本代码来找出 nop 占用的时钟周期数。我们知道 nop 需要一个时钟周期。 #include #include #include int main(void) { uin
嗨,这是我的第一个问题,所以请温和地对待我。我正在使用 MS detours 和 Visual Studio 2005 绕过一个 exe,我的 dll 被加载并且我的钩子(Hook)工作正常但是当我尝
我正在编写一个用户空间程序,我想在某个时候“阻塞”一个线程。如果我使用类似互斥的函数,线程将被切换出处理器。我想要的是让线程保持在处理器上,而无需在低功耗状态或循环 nop 操作中涉及上下文切换。有时
我是一名优秀的程序员,十分优秀!