位置:北京中公优就业IT培训学校 > 学校动态 > 到底Linux是怎样管理内存的 干货满满
到底Linux是怎样管理内存的?干货满满
内存管理应该是Linux内核中非常重要的子系统,之直在构思怎么去写一篇Linux内存管理的文章,由于内容实在过于庞大复杂,要想要通俗易懂而且不丢失专业性的阐述真的是一种考验。
了解内管管理的实现原理不管对内核开发人员还是应用程序开发人员来说都帮助极大。本文也致力于用简单生动的语言带领大家认识内存管理的原理,当然也少不了一些理论知识的铺垫。
我们的目的不是探讨理论,而是为了更加全面的理解原理,必要时我们会深入理论,窥探理论知识的背后。
进程和内存
我们都知道,进程运行需要内存。它主要是用来存放从存储介质中(磁盘/flash/...)载入的程序代码和进程运行所需要的数据内容。对于一个进程来说都会有5中不同的数据段。
代码段(text):代码段是用来存放可执行文件的操作指令,也就是说它存放的是可执行程序中在内存中的镜像。代码段是不允许修改的,所以只能进行读操作,而不允许写入的操作。
数据段(data):数据段主要用来存放已经初始化的全局变量,也就是说存放程序静态分配的变量(静态分配内存就是编译器在编译程序的时候根据源程序来分配内存.
动态分配内存就是在程序编译之后, 运行时调用运行时刻库函数来分配内存的. 静态分配由于是在程序运行之前,所以速度快, 效率高, 但是局限性大.
动态分配在程序运行时执行, 所以速度慢, 但灵活性高.)和全局变量。
bss段:bss段包含了程序中未初始化的全局变量,在内存中bss段会全部统一清零。(延伸:这就是为什么没有初始化的全局变量,都会被清零的原因)
堆(heap):堆是用来存储进程动态分配的内存,它的大小并不固定。具体可参考怎样深入理解堆和栈
栈(stack):栈是用来存放临时变量的地方,也就是C程序中{}中的变量,不包括static声明的变量(虽然static是局部变量,它的作用范围在{}中,但是它的生存周期是整个程序生命周期,它存放在数据段中)。
程序在函数调用时,参数个数过多的函数会通过栈的方式,将参数压入栈中,并且在调用结束后,函数的返回值也会通过栈来返回。从这个意义上讲,我们可以把栈看成一个寄存,交换临时数据的内存区
尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/3608/news/343693/违者必究! 以上就是北京中公优就业IT培训学校 小编为您整理 到底Linux是怎样管理内存的 干货满满的全部内容。