C++程序内存布局

来源:互联网 发布:拍照解题的软件 编辑:程序博客网 时间:2024/06/05 21:13

程序的内存布局

这里写图片描述

下面 解释图片映射的信息
从低地址到高地址

代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。
数据段:数据段用来存放可执行文件中已初始化全局变量
BSS段:BSS段包含了程序中未初始化全局变量,在内存中bss段全部置零。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程调用malloc/new等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减),连续两次申请的堆空间并不是连续的

memory mapping segment :这里 就是 之前在做FTP系统时  用MMAP()
函数映射的区域 mmap的作用是 将外存上的内容映射到内存中来

栈:栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味这在数据段中存放变量)。除此以外在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也回被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。

原创粉丝点击