实现动态数组在内存中如何分配,如何重新分配内存 并保留原来数据

如果要给二维数组(m*n)分配空间代碼可以写成下面:

// 先分配m个指针单元,注意是指针单元

// 再分配n个字符单元

// 上面的m个指针单元指向这n个字符单元首地址

如果为三维数组(m*n*p)分配空间呢,应该是:

释放代码为逆过程具体代码为:


三维以上的多维数组的分配和释放,原理与上面的一样

这个说起来有些麻烦我以前做過类似的东西,手打不易啊

一、你要定义一个数组,作为内存堆

二、把上面定义的数组分页,比如4个字节更大字节一页记录下每一頁地址,可以定义得很大越大管理这些内存需要的内存越小,但是也容易造成内存利用率不够

三、上面分组后我们就可以定义一个结構体,大致包含内存页页号、是否已经被使用了内存分配的唯一标识(用来区分哪些内存是同一片分配的内存)

四、这时候就可以写动態内存分配的函数了,根据需要分配的大小找出一片未使用的连续的内存页。比如第二步中定义一页是4字节需要5个字节的内存,就分配两页(多出来的3字节就没办法了浪费掉了)。找到内存页后将几个内存页标记为已使用同时给几个内存页赋想相同的内存分配标识,然后返回第一页的地址

五、释放内存,根据内存分配的唯一标识找到几片内存页,然后标记为未使用

感谢你的回答我刚学fortran,还不懂能帮我写个例子么?...

常用方法2把子程序放在module里

// 把rd的定义放进来

然后在主程序里,只需要调用module就会自动定义子程序。

我要回帖

更多关于 数组在内存中如何分配 的文章

 

随机推荐