Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420200
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-04 12:30
文章分类

全部博文(122)

文章存档

2017年(5)

2016年(4)

2015年(56)

2014年(41)

2013年(16)

我的朋友

分类: LINUX

2013-09-18 20:58:46

今天被朋友问到内存的分配方式和不同分配方式之间的区别,做了那么多东西,写了那么多代码,居然被这个问题卡住了,回来之后找点资料,总结了一下。

内存的分配方式主要有以下三种:
1. 从静态存储区分配。内存在程序编译的时候就已经分配好,这块内存在程序的运行期间都存在。例如:全局变量,静态变量(static)
2. 在栈上分配。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些单元会自动释放,栈内存分配运算内置于处理器的指       令集。
3. 从堆上分配,也叫做动态内存分配,程序在运行的时候用 malloc 申请任意大小的内存,程序员自己在何时用 free 释放内存。动态内存的生命周期有程序员     决定。
    动态内存分配也存在一定的问题, 即内存碎片的问题

    另外,linux系统申请内存的函数中,malloc 最终都要调用内核中的__alloc_pages(),它是最核心的非配函数。kmalloc 和 get_free_pages 函数分配的内存在物理地址上是连续的,而 vmalloc 函数分配的内存在物理地址上不一定连续。
阅读(4619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~