动态内存分配

时间:2010-04-10 17:58:07

标签: memory-management

当我们动态分配内存时,内存是否占用连续内存段。

4 个答案:

答案 0 :(得分:4)

是的,分配几乎是连续的(如果你通过一个malloc()调用得到它)。它可能不是物理上连续的,但从应用程序的角度来看,你通常不关心。

答案 1 :(得分:2)

这取决于你究竟在问什么。例如,假设你有这个C代码:

char* a = malloc(100);
char* b = malloc(100);

a和b指针每个都分配了100个字节。但是,您不能假设分配给b的100个字节将在分配给a的100个字节之后,反之亦然,或者事实上,关于它们相对于彼此的位置。所以从这个意义上说,不,它们不是连续的。

然而,在每个100字节的块中,从程序的角度来看,这100个字节是连续的。也就是说,a[1]a[0]a[2]相距一个字节。

答案 2 :(得分:2)

您应该将虚拟内存的概念与物理内存的概念分开。

虽然每个已分配的块(单个对象或对象数组)都有一个连续的虚拟空间(从动态内存分配器提供给你的地址开始),但它可以根据实际内存中的方式分割。底层操作系统管理内存。

当然,如果虚拟内存不存在,它们将对应,否则它对于正在使用它的程序是连续的而不是在内存的物理布局中。

答案 3 :(得分:0)

不一定,通常没有。可能有不同的分配机制。

许多人会在分配的块之间存储元数据,根据对象大小分割堆,以及其他东西。你不能依赖返回指针的连续性。