诺亚方舟

沉淀

Linux进程内存映射

Linux下C程序的生成分为4个阶段:预编译、编译、汇编、链接。编译器gcc经过预编译、编译、汇编3个步骤将源程序文件转换为目标文件。如果程序有多个目标文件或者程序中使用了库函数,编译器还要将所有的目标文件或所需的库链接起来,最后胜出可执行程序。但程序执行时,操作系统将可执行程序复制到内存中。

进程内存映射

进程内存映射

如上图,从内存的低地址到高地址依次如下:

代码段:也就是.text,a.out的二进制代码。代码段是制度的,可被多个进程共享。如一个进程创建了一个子进程,父子进程共享代码段,此外子进程还获得父进程数据段、堆、栈的复制

数据段:也就是.data,用于存储已被初始化的变量,包括全局变量和已被初始化的静态变量。

未初始化数据段:也就是.bss,存储违背初始化的静态变量。

:用于存放程序运行中动态分配的变量。

:用于函数调用,保存函数的返回地址、函数的参数、函数内部定义的局部变量。

此外,高地址还存储了命令行参数和环境变量。

参考文章:C语言中的内存布局

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>