1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、从堆告嫌上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就橘斗有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
程序中动态分配的内存存放在堆内存区域。
叫“堆”。c语言:char *p1//若是全局量,则在全局未初始化区,若是局部量,则在栈中。p1 = (char *)malloc(10)//分配余祥得来得10字节的区域在堆区。
c++语言: 用 new分配,用 delete释放,在 堆区。用malloc分配,用 free释放,在类似堆区的自由存储区。堆散毁高不同于栈,它的数据结构并非由系统(无论是机器系统还是 *** 作系统)支持,而是由函数库提供的。
直接方式:
当时多道程序技术还没出现,存储器的可用空间一般是给定的。那时程序员在编程序时或编译程序对源程序进行编译时,使用实际的存储器地址,这种分配方式使用户与计算机内存直接打交道。
系统资源在某一时刻为一个用户所独占。当多道程序出现时就使用户感到极不方便,因为用户要自己做主存的分配工作,而且内存不止存放一个作业,这要求用户必须知道每一个作业放在主存的什么地方,这无疑增加了用户的负担,况且存储空冲尺间的利用率也相当低。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)