在内存分配的上下文中,堆栈和含义到底是什么

时间:2017-07-01 16:43:40

标签: memory

我读过“内存分配在堆栈中”之类的内容,或者“将这些变量放在堆中”之类的内容。我曾经研究过一本关于微处理器的书,可以隐约记得有关于某些东西的主题或部分被称为堆栈。我知道堆栈也意味着一种LIFO类型的数据结构。

所以,我对堆栈的含义感到困惑。除寄存器之外的每个微处理器中是否有存储器位置被称为堆栈?

1 个答案:

答案 0 :(得分:1)

我将描述最常见的情况。

在此上下文中,堆栈是程序的专用内存(更确切地说,是一个线程)。程序启动时,操作系统会自动分配该内存。通常(但不总是),堆栈是从主存储器中分配的(因此它不是CPU中的特殊存储器)。

它的名字是堆栈,因为它被用来" LIFO风格"。调用函数时,其局部变量从堆栈中分配("推送到堆栈")。当它返回时,这些变量被释放("从堆栈中弹出")。

关于堆:heap是一个可以以比堆栈更灵活的方式分配内存的地方。堆存储空间通常比堆栈大得多。即使在函数(分配空间)返回后,分配的空间也可用。对于没有垃圾收集的语言,您必须手动释放分配的空间。不要将这个堆与数据结构堆混淆,这是一个完全不同的东西。

char *var;
void example(int length) {
  char stackVar[1024]; // a 1024 element char array allocated on the stack
  char *heapVar = new char[length]; // a length sized variable allocated on the heap, and a pointer (heapVar) to this place allocated on the stack

  var = heapVar; // store a pointer to the allocated space

  // upon return, stackVar is automatically freed
  //              the pointer heapVar automatically freed
  //              the space that heapVar points to is not freed automatically, can be used afterwards (via the var pointer)
}