当前位置: 首页 > news >正文

内存分区

image
image
(1)保留区
保留区也可以称为不可访问区域,用户是没有权限访问的,对于Linux系统而言,保留区的地址范围是0x0000_0000 ~ 0x0804_8000,所以保留区的大小是128M,一般用户定义的指针变量在初始化的时候就可以指向这块空间,由于这块空间任何程序都没有权限访问,所以可以确保指针不会被误用,所以可以防止野指针出现,宏定义NULL其实就是指向0x0000_0000
(2)代码段
程序由数据以及指令组成,代码段存储的是编译器对程序编译之后生成的二进制指令,代码段分为两部分,分别是.text段和.init段。
.text段用于存储用户程序生成的指令,.init段用于存储系统初始化的指令,这两部分的属性是只读的,在程序运行之后代码段中的数据就不应该再被修改。在程序运行之前代码段的内存空间就已经被内核计算完成。
(3)数据段
程序由数据以及指令组成,根据数据的生命周期和数据类型的不同,一般把数据存储在两部分,一个部分是栈空间,另一个部分是数据段。
数据根据数据类型(变量or常量,全局or局部)以及根据数据是否被初始化(已初始化or未初始化)把数据存储在三个不同的位置:.rodata段 .bss段 .data段。

  • .rodata段:被称为只读常量区,程序中的常量(整型常量、字符串常量)都是存储在该区域,对于该区域的属性是只读的,当程序结束后该区域的内存会被释放。
  • .data段:用于存储程序中的已经被初始化的全局变量和已经被初始化的静态局部变量,另外注意初始化的值不能为0!
  • .bss段:用于存储程序中未被初始化的全局变量以及未被初始化的静态局部变量以及初始化为0的全局变量和初始化为0的静态局部变量。
    (4)堆空间
    堆空间属于用户可以随意支配的内存,用户想要支配堆空间的内存的前提是需要向内核申请,可以通过库函数malloc()、calloc()申请堆内存,注意堆空间需要用户手动申请以及手动进行释放,通过库函数free()释放堆内存。堆内存属于匿名内存,只能通过指针访问!!!
    (5)栈空间
    栈空间主要用于存储程序的命令行参数、局部变量、函数的参数值、函数的返回地址,当函数被调用期间,内核会分配对应大小的栈空间给函数使用,当函数调用完成则栈空间就会内核释放。
    栈空间的内存存储是随机值,所以用户得到栈空间之后,应该把变量进行初始化,目的是防止变量中存储的值是不确定的。
    对于栈空间的地址分配是向下递增,所以栈空间使用的越多,则分配的内存地址越低,栈空间的数据遵循“先进后出”原则,一般内核都会提供两个指针,一个指针指向栈顶,一个指针指向栈底,数据进入栈空间的动作就叫做入栈/压栈(PUSH),数据从栈空间出去的动作就叫做出栈/弹栈(POP)。
http://www.sczhlp.com/news/56224/

相关文章:

  • Linux 向进程发送信号
  • 西安做商铺的网站wordpress评分插件
  • 合肥网站建设步骤wordpress文章 插件
  • 商城网站开发那家好建设网站的企业哪家好
  • 西安哪里可以做公司网站58同城泰安
  • wordpress建站空间网站集群系统建设
  • 常州企业免费建站淘宝网站做淘宝客
  • 网站的网页wordpress膜版教程视频
  • 卖机票的网站怎么做摘抄一则新闻
  • wordpress局域网建站游戏代理哪个平台正规
  • 什么是内存泄漏?如何判断内存泄漏(如何减少内存泄漏)
  • 四川公司网站建设招标怎样辨别自己网站的好坏
  • 英语培训网站源码优化大师电脑版官方
  • 网站开发+演讲注册安全工程师有什么用
  • 做外贸怎样上外国网站wordpress 自定义widget
  • wordpress仿站模板制作教程淘宝客网站备案流程
  • Rust与Go深度对比:如何选择适合你的编程语言
  • Golang 值溢出
  • 长江源辫状河流形态动力学研究进展与挑战
  • Extern
  • 宁德网站建设维护最近的新闻大事10条
  • 万博法务网站网页设计与制作教程 个人简历代码
  • 企业做网站认证有哪些好处at结尾网站
  • 哪家网络公司做网站好沈阳网站公司哪个好
  • 网站做电子链接标识申请好吗wordpress 转hexo
  • php网站管理系统下载wordpress主题付费下载
  • 菏泽网站建设推广价格新手做外贸怎么学
  • 网站推广方式推荐专业层析成像代做网站
  • 制作一个网站就等于制作一个网页建筑工程网络图中查找线路
  • 网站推广的优缺点网站设计能出来什么