静态内存分配和 动态内存分配
- 静态内存分配和 动态内存分配 推荐度:
- 相关推荐
静态内存分配和 动态内存分配
首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐。动态分配内存与静态分配内存的区别:
1) 静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源;
2) 静态内存分配是在栈上分配的,动态内存是堆上分配的;
3) 动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要;
4) 静态分配内存需要在编译前确定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境确定需要的内存块大小,按照需要分配内存即可。可以这么说,静态内存分配是按计划分配,而动态内存分配是按需分配。
5) 静态分配内存是把内存的控制权交给了编译器,而动态内存是把内存的控制权交给了程序员;
综上所述,静态分配内存适合于编译时就已经可以确定需要占用内存多少的情况,而在编译时不能确定内存需求量时可使用动态分配内存;但静态分配内存的运行效率要比动态分配内存的效率要高,因为动态内存分配与释放需要额外的开销;动态内存管理水平严重依赖于程序员的水平,如果处理不当容易造成内存泄漏。那么再具体些,如何选择内存分配方式,如果动态分配内存需要注意哪些问题呢?
1. 全局变量尽可能不要动态分配内存。
2. 动态分配内存时,分配与释放的代码要对称。
3. 对动态创建的对象或分配的内存块一定要检查期有效性。
4. 尽可能少次数地使用动态内存分配。
5. 在保证资源利用率的前提下,能用静态内存分配不用动态分配,特别是局部临时对象。
- 获取rowid的两种方法。
- mybatis一级缓存、二级缓存以及集成EnCache、Redis,避免脏读
- linux的s权限和t权限
- Annotation 和Spring Annotation 知识整理
- zigbee初级教程(零) :cc2530开发环境搭建
- Revit 二次开发前景
- HTK嵌入式训练
- 修改HTK代码,让其支持中文
- 推荐一个博客工具——Boke宝贝
- FPGA设计中,产生LFSR伪随机数
- VSS 2005 使用详解
- 路在何方?前途迷茫,去不去HP?
- SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)
- c# 开发winform控件
- [转载]interp1
- linux查看tomcat在,在陌生Linux环境查看Tomcat服务的方法
- LSSVM分类和回归