【发布时间】:2011-10-03 08:26:38
【问题描述】:
与(大多数)RISC 架构不同,x86 指令具有可变长度。指令的开始/结束不必对齐。如果编译器没有,一条指令可能只是位于页边距。
假设如果指令的第一个字节位于页面的最后一个字节,则该页面被标记为可执行。指令的其余字节在第二页,被标记为不可执行。
在这种情况下,当执行到这条指令时,CPU会发生什么?
编译器需要关心这种情况吗?
【问题讨论】:
-
支持不明原因的反对票。
-
当下一页是可执行时,它就可以工作了。获取是在对齐的块中完成的,为解码器提供一个队列。在 fetch 之后,在 TLB 检查之后,合并来自不同页面的字节,因此它不像页面拆分数据加载。
标签: memory compiler-construction assembly x86