堆栈是CPU还是RAM?

时间:2013-03-15 13:11:18

标签: memory stack cpu opcode eip

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

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

4 个答案:

答案 0 :(得分:33)

堆栈总是在RAM中。堆栈指针保存在CPU的寄存器中,指向堆栈顶部,即堆栈顶部位置的地址。

答案 1 :(得分:9)

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

enter image description here

来自Wiki

  

堆栈区域通常包含程序堆栈,LIFO结构   位于记忆的较高部分。

答案 2 :(得分:3)

你在谈论哪个CPU?

  1. 有些可能包含 用于callstacks的内存,有些内存包含可以用于callstack但需要操作系统实现callstack管理代码的内存,和其他人根本不包含可写内存。例如,x86架构往往在CPU中内置了一个或多个code caches and data caches

  2. 某些CPU或操作系统实现使特定内存区域不可执行的操作。例如,为了防止基于堆栈的缓冲区溢出,许多操作系统使用hardware and/or software-based data execution prevention,这可能会阻止堆栈内存作为代码执行。有些;完全有可能使用x86 CPU数据高速缓存行来存储callstack和要在更快的内存中执行的代码。

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

答案 3 :(得分:0)

在现代架构中,堆栈被映射到 ram 中。 C、C++、Pascal 等编程语言可以在 ram 中分配内存,这称为堆分配,其他与函数共存的变量是堆栈分配的。 这要求处理器和操作系统考虑在 ram 段内映射堆栈。对于带有内存管理单元的处理器,它可以位于内存中的任何位置。然而,intel 8080 有一个状态位指示它何时从堆栈读取/写入,因此堆栈可以与 RAM 物理隔离。我不知道是否实现了这样的机器,但想想情况,C指针指向什么内存,堆或堆栈。 如果堆栈分离越来越流行,我们应该在现代编程语言中使用堆栈指针和堆指针。