问题:
为什么在创建内核堆栈的"底部"时保留8个字节?
背景:
我们知道struct pt_regs并thread_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) 反编译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) 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)
arm ×1
c ×1
decompiler ×1
inheritance ×1
interface ×1
java ×1
linux-kernel ×1
polymorphism ×1
scala ×1