关于malloc的一点理解
2012-03-11 11:17
232 查看
在函数中使用malloc,如果是大的内存分配,
而且malloc与free的次数也不是特别频繁,使用malloc与free是比较合适的,
但是如果内存分配比较小,而且次数特别频繁,那么使用malloc与free就有些不太合适了。
因为过多的malloc与free容易造成内存碎片,致使可使用的堆内存变小。
尤其是在对单片机等没有MMU的芯片编程时,慎用malloc与free。
如果需要对内存的频繁操作,可以自己实现一个内存管理。
今天关于动态内存有些理解,算是对上边的补充与解释记录如下:
使用动态内存分配,应分不同的应用场合。
对于在操作系统上运行的程序,实际的物理内存分配与释放使用操作系统来实现的,即使程序调用了 malloc和free物理内存并不会马上变化。物理内存的变化,直到系统的内存管理操作时才发生。
对于裸机跑在MCU上的程序,分配与释放内存都会造成实际物理内存的变化。因为此时物理内存的分配是由自己实现的,而内存管理我们自己并没有去做。这样,盲目的使用malloc与free恰恰并不好,反而会造成内存的不恰当使用。甚至于内存溢出。
所以,动态内存的使用前提是有一套好的内存管理方法,这样动态内存的使用才会合理使用内存。如果没有合适的内存管理代码,还是用静态内存好一些。
而且malloc与free的次数也不是特别频繁,使用malloc与free是比较合适的,
但是如果内存分配比较小,而且次数特别频繁,那么使用malloc与free就有些不太合适了。
因为过多的malloc与free容易造成内存碎片,致使可使用的堆内存变小。
尤其是在对单片机等没有MMU的芯片编程时,慎用malloc与free。
如果需要对内存的频繁操作,可以自己实现一个内存管理。
今天关于动态内存有些理解,算是对上边的补充与解释记录如下:
使用动态内存分配,应分不同的应用场合。
对于在操作系统上运行的程序,实际的物理内存分配与释放使用操作系统来实现的,即使程序调用了 malloc和free物理内存并不会马上变化。物理内存的变化,直到系统的内存管理操作时才发生。
对于裸机跑在MCU上的程序,分配与释放内存都会造成实际物理内存的变化。因为此时物理内存的分配是由自己实现的,而内存管理我们自己并没有去做。这样,盲目的使用malloc与free恰恰并不好,反而会造成内存的不恰当使用。甚至于内存溢出。
所以,动态内存的使用前提是有一套好的内存管理方法,这样动态内存的使用才会合理使用内存。如果没有合适的内存管理代码,还是用静态内存好一些。
相关文章推荐
- 关于malloc和free个人的一点理解
- 关于DataRow和DataColumn的一点个人简单理解
- Xcode5.1.1关于Images.xcassets的一点理解
- 关于tensorflow conv2d卷积备忘的一点理解
- 关于C#里面socket编程的一点理解
- 关于session实现原理和运行机制的一点理解
- 关于malloc的一些理解
- 浅说管理中关于“组织”的一点理解
- 关于 数据文件自增长 的一点理解
- 关于java的pojo包装类型的一点理解
- 关于马尔科夫决策过程的一点不理解的地方
- 关于重定位的一点理解
- 关于 alter table move tablespace 的一点理解
- 关于KMP算法的一点个人理解
- 关于C#中Thread.Join()的一点理解
- 关于SVM的一点个人理解
- 关于特性和类的一点理解
- 关于原型的一点理解。
- 关于概率图的一点理解
- 关于面向对象的一点小理解