BSS段,数据段,代码段,堆内存和栈
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段,数据段,代码段,堆内存和栈相关推荐
- 段寄存器中代码段数据段堆栈段附加段
段寄存器中代码段数据段堆栈段附加段
- 栈和堆存储在计算机RAM中,堆内存和栈内存及C++内存分配
1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式管理.段页式管理. 操作系统分配资源的单位是进程,所以,内存管理的过程也是以进程 ...
- Java的堆内存和栈内存
一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于存储实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...
- C++中的堆内存、栈内存和静态内存
C++中的堆内存.栈内存和静态内存 C++中的空间主要分为三类,堆内存.栈内存和静态内存,其中静态内存用来存储全局对象(定义在任何函数之外的对象).局部static对象.类static数据成员,栈内存 ...
- c语言栈内存和堆内存大小,堆内存和栈内存及C++内存分配
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 1.现代操作系统内存管理主流的操作系统(Windows,Linux)都采用虚拟内存管理的方式,具体说就是:页式管理.段式 ...
- 简述JAVA中堆内存与栈内存的区别
Java把内存划分成两种:一种是栈内存,一种是堆内存. 一.栈内存 存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则. 栈内存在函数中定义的"一些基本类型的变量和对象的引用变量& ...
- java堆内存和栈内存的区别
一段时间之前,我写了两篇文章文章分别是Java的垃圾回收和Java的值传递,从那之后我收到了很多要求解释Java堆内存和栈内存的邮件,并且要求解释他们的异同点. 在Java中你会看到很多堆和栈内存的引 ...
- 堆内存、栈内存、方法区
一.Java内存管理 Java程序运行在虚拟机(JVM)上,JVM相当于Java程序和操作系统之间的桥梁,Java程序通过JVM实现了平台无关性,可以跨平台操作.Java虚拟机在执行Java程序的过程 ...
- Java中的堆内存、栈内存和方法区总结
Java中内存分成两种,一种叫做栈内存,一种叫做堆内存.还有一个方法区,也叫做静态区. 1.栈内存中放哪些东西? ①基本类型的变量,例如int a=3中的a: ②对象的引用变量,例如Thread ...
最新文章
- php页面调用时间戳,php--------获取当前时间、时间戳
- 【机器学习】深度盘点:详细介绍 Python 中的 7 种交叉验证方法!
- mybatisplus执行sql语句_一条更新的SQL语句是如何执行的?
- Google 出的 Guava 是个什么鬼
- xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器
- net空间一次购买终身使用_net域名与org域名哪个投资价值更高?
- python post请求参数化,参数化包含JSON主体的python POST请求
- linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区
- ios入门之消息推送详解
- 从Android support到Androidx
- php里日期转为时间戳_php时间戳与日期的转换
- 北复交浙科哈航邮中上科保研之路
- 数字图像处理技术在智能交通中的应用
- 进程同步与信号量机制的应用
- 苹果cms function.php,送你们几个字!对!就是MACCMS注入!
- python 分析单细胞数据教程 scanpy---初探
- 深度学习项目-图片自动着色
- 大厂Android面试经历(已获头条、百度、OPPO等大厂offer)
- 基于Arduino UNO的光驱写字机制作
- 四百元左右有什么降噪耳机推荐?高性价比降噪耳机推荐