我正在阅读内存管理,并完全被以下事情搞糊涂了。请解释一下。我无法理清我的概念。
我知道这些问题是非常基本的,或者可能是错误的预测。但我完全糊涂了。
请解释。
答案 0 :(得分: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(???);
}