什么叫动态内存分配?有什么用.?
展开全部
所谓的动态内存分配就是由程序员控制的一边内存地址,在这里可以分配内存空间来使用,为了防止程序所占的内存过大,在使用完这边内存空间后由程序员自行释放这边空间。确保整个程序高校快速的运行。动态内存的好处是归纳为8个字:用时分配,不用释放!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-17
展开全部
我这儿采用通俗的方式给你说一下:动态内存就是指动态分配内存。
比如说你有一部手机,总的内存为64M。里面已经用去24M,那么还有40M可供你随便分配。比如说你手机短信用掉20M,MP3用掉20M,或者你不喜欢短信太多,要听MP3,那你可以把短信删掉一些,那么删掉的内存你又可以用来做其它需要用内存,比如存放MP3文件啊什么的。
那么有的手机呢,就是固定内存,比如说手机短信给固定了5M,就是说你的短信当满了5M的时候,就不能再存短信啦。明白吗?
比如说你有一部手机,总的内存为64M。里面已经用去24M,那么还有40M可供你随便分配。比如说你手机短信用掉20M,MP3用掉20M,或者你不喜欢短信太多,要听MP3,那你可以把短信删掉一些,那么删掉的内存你又可以用来做其它需要用内存,比如存放MP3文件啊什么的。
那么有的手机呢,就是固定内存,比如说手机短信给固定了5M,就是说你的短信当满了5M的时候,就不能再存短信啦。明白吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-17
展开全部
根据数据量即使调整对内存站用空间的大小。
优点:
节省资源,程序运行速度快,效率高。
优点:
节省资源,程序运行速度快,效率高。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序在内存中是分段存储的。
代码段:存放语句转换的数字;程序运行时不可修改;
全局段:用来记录全局变量和静态变量的存储位置;不会随着程序的运行而改变;
栈:存放局部变量,块变量,形式参数和返回值的存储位置;随着程序的运行其大小将不断改变;函数调用时,开辟空间,函数调用结束收回其空间;不同调用函数之间遵循后进先出的原则。
堆:存放动态分布的存储位置;
一:传统数组(静态数组)的缺点
1:数组的长度必须事先指定,并且是常整数,不能是变量 int a[5];
2:传统数组程序员无法由程序员释放,只能由系统释放。(并且只能在数组所在函数结束才能释放)
3:数组的长度在函数运行期间不能动态的扩充和缩小
4:A函数定义的传统数组,在A函数结束时,在B函数中是不能使用的,因为已经释放。也就是传统数组不能跨函数。
区分:静态存储与内存的静态开辟
二:为什么要动态分配内存
用来解决传统数组的四个缺陷
三:动态内存分配举例,以及动态数组的构造
方式:malloc函数,在堆开辟空间
1:malloc是由程序员在堆栈动态开辟空间
2:返回值开辟空间的首地址,但是类型是void *,需要强制类型转换
3:分配的内存空间应该能整除类型所占的字节数
4:包含头文件malloc.h
5:只能用free(p)来释放p所指向的动态开辟的内存空间。
6:对动态内存空间的操作,用*p来操作。
7:可以用多个指针指向这个动态空间
8:当有多个指针只向这个动态空间时,只能用free一个指针,多次重复释放要被报错
9:可以将动态开辟的的内存指针作为函数参数
问题:p的分配类型是动态的还是静态的?当调用free(p)后,p的内存空间会被释放么?
例子:动态构建一个一维数组:
动态扩充数组的长度,也就是在程序运行时动态扩充:realloc(首地址,总共字节数)
作用:将原来动态开辟的动态内存重新开辟一个字节数,如果这个数比以前的大,前面的数据保存。如果比原来的小,保留前面的数据。
注意:扩充或者缩放的内存单元是新开辟的内存单元。这个过程中有值的拷贝过程。返回值是新开辟的地址空间首地址。
四:静态内存和动态内存的比较
静态开辟的内存:在栈中开辟,由编译器分配,由系统自动释放
动态开辟的内存:在堆中开辟,由程序员开辟,由程序员自动释放。
五:跨函数使用内存的问题
代码段:存放语句转换的数字;程序运行时不可修改;
全局段:用来记录全局变量和静态变量的存储位置;不会随着程序的运行而改变;
栈:存放局部变量,块变量,形式参数和返回值的存储位置;随着程序的运行其大小将不断改变;函数调用时,开辟空间,函数调用结束收回其空间;不同调用函数之间遵循后进先出的原则。
堆:存放动态分布的存储位置;
一:传统数组(静态数组)的缺点
1:数组的长度必须事先指定,并且是常整数,不能是变量 int a[5];
2:传统数组程序员无法由程序员释放,只能由系统释放。(并且只能在数组所在函数结束才能释放)
3:数组的长度在函数运行期间不能动态的扩充和缩小
4:A函数定义的传统数组,在A函数结束时,在B函数中是不能使用的,因为已经释放。也就是传统数组不能跨函数。
区分:静态存储与内存的静态开辟
二:为什么要动态分配内存
用来解决传统数组的四个缺陷
三:动态内存分配举例,以及动态数组的构造
方式:malloc函数,在堆开辟空间
1:malloc是由程序员在堆栈动态开辟空间
2:返回值开辟空间的首地址,但是类型是void *,需要强制类型转换
3:分配的内存空间应该能整除类型所占的字节数
4:包含头文件malloc.h
5:只能用free(p)来释放p所指向的动态开辟的内存空间。
6:对动态内存空间的操作,用*p来操作。
7:可以用多个指针指向这个动态空间
8:当有多个指针只向这个动态空间时,只能用free一个指针,多次重复释放要被报错
9:可以将动态开辟的的内存指针作为函数参数
问题:p的分配类型是动态的还是静态的?当调用free(p)后,p的内存空间会被释放么?
例子:动态构建一个一维数组:
动态扩充数组的长度,也就是在程序运行时动态扩充:realloc(首地址,总共字节数)
作用:将原来动态开辟的动态内存重新开辟一个字节数,如果这个数比以前的大,前面的数据保存。如果比原来的小,保留前面的数据。
注意:扩充或者缩放的内存单元是新开辟的内存单元。这个过程中有值的拷贝过程。返回值是新开辟的地址空间首地址。
四:静态内存和动态内存的比较
静态开辟的内存:在栈中开辟,由编译器分配,由系统自动释放
动态开辟的内存:在堆中开辟,由程序员开辟,由程序员自动释放。
五:跨函数使用内存的问题
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |