当我们动态分配内存时,内存是否占用连续内存段。
答案 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)
不一定,通常没有。可能有不同的分配机制。
许多人会在分配的块之间存储元数据,根据对象大小分割堆,以及其他东西。你不能依赖返回指针的连续性。