0

在阅读了 Spectre & Meltdown 漏洞之后,我了解了推测执行。

给定以下简单的 C++ 程序:

#include <stdlib.h>

void mallocBranch(int i) {
   if (i < 500) {
      malloc(i);
   }
}

int main(int argc, char** argv){
   for (i := 0; i < 5000; i++) {
      mallocBranch(1);
   }
   mallocBranch(500000000);

   return 0;
}
  • 我假设malloc编译器没有优化调用。

问:mallocBranch(500000000)被调用时会发生什么?CPU 是否会查看分支预测缓存并查看过去的if (i < 500)成功调用并推测性地执行分支malloc(500000000)malloc每次分支预测缓存的全部内容都会覆盖分支的数量吗?如果malloc(500000000)实际上是推测执行,是否会为进程分配 5 亿字节的内存,如果只是暂时的?

4

0 回答 0