美文网首页
程序相关信息加载至内存的布局介绍

程序相关信息加载至内存的布局介绍

作者: 執著我們的執著 | 来源:发表于2018-08-15 00:11 被阅读0次
程序是与数据打交道的,在执行某一功能时,将该功能所需要的数据加载至内存中,然后在执行完毕的时候释放内存资源
  1. BSS(Block Started by Symbol)通常是指用来存放程序中未初始化全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

  2. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配

  3. 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

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

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

相关文章

  • 程序相关信息加载至内存的布局介绍

    程序是与数据打交道的,在执行某一功能时,将该功能所需要的数据加载至内存中,然后在执行完毕的时候释放内存资源 BSS...

  • 内存管理-内存布局及内存管理方案

    内存布局 内存区域分为内核区的内存,程序加载的控件,保留的内存空间地址的表示是由下到上是低地址到高地址程序加载到内...

  • iOS面试6 - 内存管理

    内存布局 内存区域: 内核区(low) - 程序加载 - 保留(high)程序:未初始化数据(.bss)已初始化数...

  • iOS内存布局&内存管理方案&数据结构

    内存布局 上面的图代表一个内存区域,内存区域分为内核区的内存(最上边),程序加载的控件(中间),保留的内存空间(最...

  • category为什么不能添加属性

    category是在程序加载运行的时候,才加载到内存中,此时各个类的内存布局已经确定了,不可以再更改。 可以加属性...

  • iOS内存管理底层原理

    内存布局 了解程序内存布局请点击程序的内存布局以及栈、堆原理[https://www.jianshu.com/p/...

  • 内存管理

    1. 内存布局:记住五个字母.bss,data,text,stack,heap.对应的含义程序加载到内存会对应成三...

  • 懒加载的相关介绍

    懒加载的相关介绍 1.懒加载的基本 懒加载-----也成为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所...

  • 死磕java之多线程(一)进程与线程

    进程与线程 进程 · 程序由指令和数据组成,数据要读写,就必须要将指令加载至CPU,数据加载至内存,在指令运行过程...

  • 并发编程(一):线程的基本应用

    进程和线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在...

网友评论

      本文标题:程序相关信息加载至内存的布局介绍

      本文链接:https://www.haomeiwen.com/subject/pszbbftx.html