BSS段,数据段,代码段,堆内存和栈
作者:delnabla 日期:2010-10-26
字体大小: 小 中 大
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

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

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

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

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

example:
#include <stdio.h>
int a = 0;
int b;

int main(int argc, char *argv[])
{
  int c;
  char *d;

d = malloc(100);
  printf("%d %d %d/n",a,b,c);
  free(d);
  return 0;
}

a就在数据段,b在bss段,main函数在代码段,c在栈,d在堆。
你可以使用objdump或者nm来看段信息。具体的还是man吧

BSS段,数据段,代码段,堆内存和栈相关推荐

  1. 段寄存器中代码段数据段堆栈段附加段

    段寄存器中代码段数据段堆栈段附加段

  2. 栈和堆存储在计算机RAM中,堆内存和栈内存及C++内存分配

    1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式管理.段页式管理. 操作系统分配资源的单位是进程,所以,内存管理的过程也是以进程 ...

  3. Java的堆内存和栈内存

    一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于存储实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...

  4. C++中的堆内存、栈内存和静态内存

    C++中的堆内存.栈内存和静态内存 C++中的空间主要分为三类,堆内存.栈内存和静态内存,其中静态内存用来存储全局对象(定义在任何函数之外的对象).局部static对象.类static数据成员,栈内存 ...

  5. c语言栈内存和堆内存大小,堆内存和栈内存及C++内存分配

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式 ...

  6. 简述JAVA中堆内存与栈内存的区别

    Java把内存划分成两种:一种是栈内存,一种是堆内存. 一.栈内存 存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则. 栈内存在函数中定义的"一些基本类型的变量和对象的引用变量& ...

  7. java堆内存和栈内存的区别

    一段时间之前,我写了两篇文章文章分别是Java的垃圾回收和Java的值传递,从那之后我收到了很多要求解释Java堆内存和栈内存的邮件,并且要求解释他们的异同点. 在Java中你会看到很多堆和栈内存的引 ...

  8. 堆内存、栈内存、方法区

    一.Java内存管理 Java程序运行在虚拟机(JVM)上,JVM相当于Java程序和操作系统之间的桥梁,Java程序通过JVM实现了平台无关性,可以跨平台操作.Java虚拟机在执行Java程序的过程 ...

  9. Java中的堆内存、栈内存和方法区总结

    Java中内存分成两种,一种叫做栈内存,一种叫做堆内存.还有一个方法区,也叫做静态区. 1.栈内存中放哪些东西?  ①基本类型的变量,例如int a=3中的a:  ②对象的引用变量,例如Thread ...

最新文章

  1. php页面调用时间戳,php--------获取当前时间、时间戳
  2. 【机器学习】深度盘点:详细介绍 Python 中的 7 种交叉验证方法!
  3. mybatisplus执行sql语句_一条更新的SQL语句是如何执行的?
  4. Google 出的 Guava 是个什么鬼
  5. xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器
  6. net空间一次购买终身使用_net域名与org域名哪个投资价值更高?
  7. python post请求参数化,参数化包含JSON主体的python POST请求
  8. linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区
  9. ios入门之消息推送详解
  10. 从Android support到Androidx
  11. php里日期转为时间戳_php时间戳与日期的转换
  12. 北复交浙科哈航邮中上科保研之路
  13. 数字图像处理技术在智能交通中的应用
  14. 进程同步与信号量机制的应用
  15. 苹果cms function.php,送你们几个字!对!就是MACCMS注入!
  16. python 分析单细胞数据教程 scanpy---初探
  17. 深度学习项目-图片自动着色
  18. 大厂Android面试经历(已获头条、百度、OPPO等大厂offer)
  19. 基于Arduino UNO的光驱写字机制作
  20. 四百元左右有什么降噪耳机推荐?高性价比降噪耳机推荐

热门文章

  1. poj 1515+poj 1438(边双连通)
  2. MCU助推居家移动医疗微型化
  3. 【ABAP】Cross client master/business data transfer guide(ALE I Doc)
  4. java概述、安装、配置环境、运行
  5. 从0到100——知乎架构变迁史
  6. linux下编译软件通用方法(memcached为例)
  7. [linux]unixODBC的安装配置说明
  8. 缓存和字符串相互转换
  9. Cygwin的安装,卸载,以及安装gdb
  10. Hough Transform 的算法思想