【问题标题】:How heaps reference is stored in stack?堆引用如何存储在堆栈中?
【发布时间】:2016-03-05 19:17:18
【问题描述】:

我正在阅读内存管理,但完全被以下事情弄糊涂了。请解释一下。我无法清除我的概念。

  1. 每个堆的根节点的引用都驻留在堆栈中。为什么有必要?
  2. 对象或引用类型还需要堆栈空间以及堆?

我知道这些问题非常基本,或者可能是我的错误预测。但我完全糊涂了。

请解释一下。

【问题讨论】:

  • 堆栈有存储在堆中的数据的地址位置。必须保持变量的范围。

标签: memory-management stack heap-memory ram


【解决方案1】:

让我们看一个 C 语言表示的例子:

void foo(void)
{
    char *heap;

    heap = malloc(4096);

    memset(heap, 0xff, 4096);

    free(heap);
}

如果你需要 4096 字节的堆内存,你应该在堆中分配内存。此外,您需要保留内存的起始地址(指针)来操作之前分配的堆内存。所以你需要额外的指针变量heap 来保存指向堆内存的指针。 想象一下heap 不存在,你如何像下面这样操作堆内存:

void bar(void)
{
    // allocated 4096 bytes heap memory.
    // but there is no pointer variable to keep its address
    malloc(4096);

    // how do you manipulate the memory?
    memset(???, 0xff, 4096);

    // how do you free the memory?
    free(???);
}

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 2015-03-15
    • 2013-12-04
    • 2020-11-17
    • 2015-03-09
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多