小编Cod*_*Now的帖子

在ARM Linux中,每个线程在内核堆栈"底部"保留​​的少数字节的目的是什么

问题:

为什么在创建内核堆栈的"底部"时保留8个字节?

背景:

我们知道struct pt_regsthread_info共享相同的2个连续页面(8192个字节),pt_reg位于较高端和thread_info较低端.但是,我注意到这两个页面的最高地址保留了8个字节:

在arch/arm/include/asm/threadinfo.h中

#define THREAD_START_SP     (THREAD_SIZE - 8)
Run Code Online (Sandbox Code Playgroud)

c arm linux-kernel

8
推荐指数
2
解决办法
494
查看次数

反编译Scala代码:为什么派生类中有两个重写方法?

反编译Scala代码:为什么派生类中有两个重写方法?

class A
{
    private var str: String = "A"
    val x: A = this

    override def toString(): String = str

    def m1(other: AnyRef): AnyRef = {
      println("This is A.m1(AnyRef)")
      other
    }
}

class B extends A {
    private var str: String = "B"
    var z: Int = 0
    override val x: B = this

    override def m1(other: AnyRef): B = {
      println("This is B.m1(AnyRef)")
      this
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的B类反编译为:

public class test$B extends test$A {
  private java.lang.String str;
  private int …
Run Code Online (Sandbox Code Playgroud)

polymorphism inheritance scala dynamic-dispatch decompiler

8
推荐指数
1
解决办法
214
查看次数

Java实现两个接口并解决默认方法冲突:为什么使用super关键字?

Java解析默认方法冲突:为什么使用super关键字?

我正在阅读"不耐烦的核心Java SE 9"这本书.在"解决默认方法冲突"一节中,我发现在解决默认方法冲突时,会使用super关键字.但我不明白为什么要使用super关键字.

从这个链接:https://docs.oracle.com/javase/tutorial/java/IandI/override.html 我知道super关键字是必需的(否则程序将无法编译).

但这似乎违反直觉.根据我的理解,界面" Identified"没有超级类.为什么不用" return Identified.getId();"?

public interface Person {
    default int getId() {
        return 0;
    }
}

public interface Identified {
    default int getId() {
        return Math.abs(hashCode());
    }
}

public class Employee implements Person, Identified {
    public int getId() {
        return Identified.super.getId();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题和这个问题有一些解释,但没有一个解释为什么使用关键字super.

java interface multiple-inheritance

5
推荐指数
1
解决办法
667
查看次数