今天被朋友问到内存的分配方式和不同分配方式之间的区别,做了那么多东西,写了那么多代码,居然被这个问题卡住了,回来之后找点资料,总结了一下。
内存的分配方式主要有以下三种:
1. 从静态存储区分配。内存在程序编译的时候就已经分配好,这块内存在程序的运行期间都存在。例如:全局变量,静态变量(static)
2. 在栈上分配。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些单元会自动释放,栈内存分配运算内置于处理器的指 令集。
3. 从堆上分配,也叫做动态内存分配,程序在运行的时候用 malloc 申请任意大小的内存,程序员自己在何时用 free 释放内存。动态内存的生命周期有程序员 决定。
动态内存分配也存在一定的问题, 即内存碎片的问题
另外,linux系统申请内存的函数中,malloc 最终都要调用内核中的__alloc_pages(),它是最核心的非配函数。kmalloc 和 get_free_pages 函数分配的内存在物理地址上是连续的,而 vmalloc 函数分配的内存在物理地址上不一定连续。
阅读(4682) | 评论(0) | 转发(0) |