动态分配内存的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:13:52
前几天看见这么一段话:
比如5个分散的5k的空间,如果你使用数组申请一个25k的空间,则这分散的5个5k空间无法使用,系统要在内存中另外开辟一个25k的连续空间,而使用指针则可以利用分散的空间。这样就提高了资源的利用率。

我的问题是,用动态申请的内存,可以不是连续的吗?
如何解释?
例如两个分散的空间,指针自加,是如何跑到另外的空间上的呢?

首先,动态申请的内存,必须是连续的,这是系统自己寻找的连续空间。此点楼主可以求证malloc,calloc等函数或者new。
原因是:虽然动态申请的空间是指针指向的,但是它不等同于链表。
这里还需要明确一个问题,楼主所说的动态申请内存和利用分散空间的指针不是一回事。能利用分散空间的应该是非线性链表。而动态申请的空间是连续的。非线性链表每一个元素是一个结构体,分指针域和数据域。这俩都存放在不连续的空间上,指针域指向下一结点。
问题补充回答:
如果是链表,指针是不会自加的。但是这个问题不过还是另外一种可能。因为指针是变量,它自己本身是要存储的,所以可能指针本身是一个数组,但是指针指向的空间是互相不联系的。这样,指针自加,相当于指针数组元素加一,自然下移到下一个指针,这样就指向了下一个不联系的空间。

其实都是按用途比较理想的!我想你是不需要!

物理空间是可以不连续的
但对於用户来说,虚拟空间是连续的

如果用指针的话就需要用链表,里面敌意一个指针指向你下一块空间,这就是数组(线性表)和链表之间的区别啦

一次动态申请内存要分配连续的空间。如果没有足够大小的空间,则内存会分配失败。如果是两次分配,则这两次之间的内存,不要求是连续的。
分散的内存,指针自加?这个就不太知道了,指针自加,就跑到了另外的一个空间上?是不是巧合?恰好两个内存是连续的?你可以贴上来一个例子。
分散的内存之间,可以通过指针把它们链接起来,这样,就克服了动态内存分配中要求内存连续的局限性。比如说,链表就是一个例子,在指针域,保存着指向下一个结点的指针,这样,就可以找到分散的存储块了。

你说的可能是指针数组,每一个数组元素都是一个指针,用这样的一个指针去new一个连续的5K空间,然后数组++也就是到了另外一个指针了,在用这个指针去new一个连续的5K空间。那么这样下去,有5个这样的指针就可以new25K的不连续的空间了!不知道说的明白不。