linux内存理解和整理
来源:互联网 发布:csol由于网络设定问题 编辑:程序博客网 时间:2024/06/04 19:07
进程内存空间
正在运行的程序,叫进程。每个进程都有完全属于自己的,独立的,不被干扰的内存空间。此空间,被分成几个段(Segment),分别是Text, Data, BSS, Heap, Stack。用户进程内存空间,也是系统内核分配给该进程的VM(虚拟内存),但并不表示这个进程占用了这么多的RAM(物理内存)。这个空间有多大?命令top输出的VIRT值告诉了我们各个进程内存空间的大小(进程内存空间随着程序的执行会增大或者缩小)。你还可以通过/proc//maps,或者pmap –d 了解某个进程内存空间都分布。
一个linux进程分为几个部分(从一个进程的地址空间的低地址向高地址增长):
1.text段,就是存放代码,可读可执行不可写,也称为正文段,代码段。
2.data段,存放已初始化的全局变量和已初始化的static变量(不管是局部static变量还是全局static变量)
3.bss段,存放全局未初始化变量和未初始化的static变量(也是不区分局部还是全局static变量)
以上这3部分是确定的,也就是不同的程序,以上3部分的大小都各不相同,因程序而异,若未初始化的全局变量定义的多了,那么bss区就大点,反之则小点。
4.heap,也就是堆,堆在进程空间中是自低地址向高地址增长,你在程序中通过动态申请得到的内存空间(c中一般为malloc/free,c++中一般为new/delete),就是在堆中动态分配的。
5.stack,栈,程序中每个函数中的局部变量,都是存放在栈中,栈是自高地址向低地址增长的。起初,堆和栈之间有很大一段空间,然后随着,程序的运行,堆不断向高地址增长,栈不断向低地址增长,这样,堆跟栈之间的空间总有一个最大界限,超过这个最大界限,就会出现堆跟栈重叠,就会出错,所以一般来说,Linux下的进程都有其最大空间的。
6.再往上,也就是一个进程地址空间的顶部,存放了命令行参数和环境变量。
进程的内存使用情况比较复杂,这是因为:
- 进程申请的内存不一定真正会被用到
- 真正用到的内存也不一定是只有该进程自己在用 (比如动态共享库)
- linux内存理解和整理
- JAVA内存和垃圾回收的一些理解文章整理
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- linux物理内存和虚拟内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- linux虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- Linux 虚拟内存和物理内存的理解
- 理解linux内存
- Linux的内存理解
- linux的虚拟内存和物理内存的理解
- 深入理解C语言变量和内存——整理篇
- 2016夏季练习——线段树
- 让eclipse CDT支持C++11
- Java Web学习(36):Filter学习(三)
- SQL万能密码:' or 1='1
- 处理工行b2c上海机构问题反思
- linux内存理解和整理
- 【深度学习】生成对抗网络Generative Adversarial Nets
- PNG,JPEG,BMP,JIF图片格式详解及其对比
- Nodejs基于mongoose模块的增删改查
- LeetCode--No.36--Valid Sudoku
- 异步加载图片
- 加强版Apktool堪称逆向神器
- 我的第一篇博客
- IMX6Q LTIB 安装编译错误的解决办法