简单理解动态内存分配和静态内存分配的区别
2015-06-22 13:38
204 查看
在涉及到内存分配时,我们一般都要考虑到两种内存分配方式,一种是动态内存分配,另一种是静态内存分配,我们该怎么理解这两者的区别呢?
在我看来,静态内存分配和动态内存分配比较典型的例子就是数组和链表,数组的长度是预先定义好的,在整个程序中是固定不变的,所以他在内存分配时是以静态内存分配的方式进行的。而链表,它的信息有可能会随时更改,内存的分配取决于我们实际输入的数据,这样就用到了动态内存分配的方式。
静态内存分配是在程序编译或者运行过程中,按事先规定的大小分配内存空间的分配方式,他的前提的必须事先知道所需内存空间的大小,它的内存分配在栈区和全局变量区。
动态内存分配是按输入信息的大小分配所需要的内存单元,他的特点是按需分配,内存分配在堆区。
为了便于理解我们来举个小例子,静态内存分配和动态内存分配的方式我们可以比作我们去旅游,旅游之前沃恩肯定要做的事情是带好钱,现在我们有两种带钱的方式,一种是一次性的带足够的钱,另一种是先带一点钱,足够我们买飞机票到达旅游的地点,当我们看到什么需要买的东西时,打电话给自己的亲人或者朋友,让他们给你打过你足够买你需要东西的钱。我们可以看到,你要是只要一次钱,你只能是提前做好预算,只能是比你计划的所需要的钱要多,而且只能多不能少,否则的话,你到了旅游的地方将不能再回到你的家,这是一点。而需要多少钱就让亲朋好友打多少钱的方式在我们看来很是笨重,但是我们这里只是要说明动态内存分配的特点,动态内存分配是按照我们需要多少钱就给我们送多少钱。
在这里我们可以考虑一下两者的执行速率和内存空间分配的问题,由上面的例子我们可以很直白的看出,静态内存分配比动态内存分配的速率要高不少,但是我们也看到,静态内存分配的方式有可能会有内存剩余也就是有可能会有我们不使用的内存空间,这样就造成了内存的浪费。
在我看来,静态内存分配和动态内存分配比较典型的例子就是数组和链表,数组的长度是预先定义好的,在整个程序中是固定不变的,所以他在内存分配时是以静态内存分配的方式进行的。而链表,它的信息有可能会随时更改,内存的分配取决于我们实际输入的数据,这样就用到了动态内存分配的方式。
静态内存分配是在程序编译或者运行过程中,按事先规定的大小分配内存空间的分配方式,他的前提的必须事先知道所需内存空间的大小,它的内存分配在栈区和全局变量区。
动态内存分配是按输入信息的大小分配所需要的内存单元,他的特点是按需分配,内存分配在堆区。
为了便于理解我们来举个小例子,静态内存分配和动态内存分配的方式我们可以比作我们去旅游,旅游之前沃恩肯定要做的事情是带好钱,现在我们有两种带钱的方式,一种是一次性的带足够的钱,另一种是先带一点钱,足够我们买飞机票到达旅游的地点,当我们看到什么需要买的东西时,打电话给自己的亲人或者朋友,让他们给你打过你足够买你需要东西的钱。我们可以看到,你要是只要一次钱,你只能是提前做好预算,只能是比你计划的所需要的钱要多,而且只能多不能少,否则的话,你到了旅游的地方将不能再回到你的家,这是一点。而需要多少钱就让亲朋好友打多少钱的方式在我们看来很是笨重,但是我们这里只是要说明动态内存分配的特点,动态内存分配是按照我们需要多少钱就给我们送多少钱。
在这里我们可以考虑一下两者的执行速率和内存空间分配的问题,由上面的例子我们可以很直白的看出,静态内存分配比动态内存分配的速率要高不少,但是我们也看到,静态内存分配的方式有可能会有内存剩余也就是有可能会有我们不使用的内存空间,这样就造成了内存的浪费。
相关文章推荐
- hdu2422考研路茫茫——空调教室 tarjan+树形dp
- MD5加密字符串
- (ros/topic_tools): mux 话题的多路切换开关
- C++学习笔记__类的派生和多态性
- 开始刷leetcode day47: Word Break
- Yahoo!团队:网站性能优化的35条黄金守则
- 递归函数的经典例子(汉诺塔问题)
- poj1042贪心方法或者dp方法
- 4th Median of Two Sorted Arrays -- leetcode
- QT实现,通过URL下载文件的接口实现
- 微信公众平台开发:OAuth2.0网页授权
- 保护眼睛的桌面设置
- 5亿整数的大文件,怎么排?
- C++程序设计--对象分册(第5章)
- 搭建andriod开发环境
- 黑马day06 EL表达式之cout&cset&cremove标签
- 微信公众平台开发:JS API支付
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
- CSS3感应鼠标背景闪烁和图片缩放效果
- 导入时如何定制spring-boot依赖项的版本