当我遇到这个时,我只是在阅读我的操作系统中的linux如何工作.
[...]内核被创建为单个单一的二进制文件.主要原因是提高性能.由于所有内核代码和数据结构都保存在单个地址空间中,因此当进程调用操作系统函数或传递硬件中断时,不需要上下文切换.
这听起来对我来说非常了不起,当然它必须存储进程的上下文才能运行到内核模式来处理中断..但好吧,我现在就买它.在描述进程的调度上下文时,有几页,它说:
进程执行时发生的系统调用和中断都将使用此堆栈.
"这个堆栈"是内核存储进程寄存器等的地方.
这不是第一次引用的直接矛盾吗?我不知道以某种方式解释它吗?
不久前我和一群演员经常玩,显然我当时并没有这么做.我现在正在查看我的代码,我看到了这个:
Base(Derived &p_derived) : m_state(static_cast<Base>(p_derived).m_state){}
Run Code Online (Sandbox Code Playgroud)
我想我现在已经更好地理解了指针和引用的转换,这要归功于stackoverflow的一个非常好的答案,但是现在涉及到了对象.将引用转换为对象时会发生什么?或者如果p_derived是对象本身而不仅仅是一个引用呢?是否会创建新对象?如果是这样,它们将如何实现?
我也很惊讶这可以编译,因为在Base.h中找到了这个代码,Derived只是前向声明意味着它不应该知道它实际上是从Base派生的.我尝试在另一个地方进行从Derived*到Base*的静态转换,但由于类型与转换单元不相容,因此不能编译.