堆栈是CPU还是RAM?

abi*_*ana 17 memory cpu stack opcode eip

我有一些关于堆栈的问题.

  1. 堆栈是CPU还是RAM?
  2. 堆栈是运行OPcode的地方吗?
  3. EIP是CPU还是RAM?

unx*_*nut 37

堆栈始终在RAM中.堆栈指针保存在CPU中的寄存器中,指向堆栈顶部,即堆栈顶部位置的地址.

  • +1用于指定来自cpu的寄存器指向堆栈 (10认同)

Goa*_*444 10

堆栈位于RAM内,而不在CPU内.段如专用于堆栈,如下图所示:

在此输入图像描述

来自维基:

堆栈区域包含程序堆栈,LIFO结构,通常位于存储器的较高部分.


aut*_*tic 6

你说的是哪个CPU?

  1. 有些可能包含用于调用堆栈的内存有些包含可用于调用堆栈但需要操作系统实现调用堆栈管理代码的内存,而另一些则根本不包含可写内存。例如,x86架构往往在CPU中内置一个或多个代码缓存数据缓存。

  2. 某些 CPU 或操作系统会执行使特定内存区域变得不可执行的操作。例如,为了防止基于堆栈的缓冲区溢出,许多操作系统使用基于硬件和/或软件的数据执行预防,这可能会阻止堆栈内存作为代码执行。有些则不然;x86 CPU 数据缓存线完全有可能用于存储调用堆栈和要在更快的内存中执行的代码。

  3. EIP听起来像是 IA32 CPU 架构的寄存器。如果您指的是 IA-32,那么是的,这是一个 CPU 操作,尽管许多操作系统会将其切换到 RAM 或从 RAM 切换来模拟多任务处理。