内存布局:栈,堆,BSS段(静态区),代码段,数据段

摘自:https://www.cnblogs.com/Spider-spiders/p/8884729.html

简介

我们程序运行的时候都是放在内存里的、根据静态、成员函数、代码段、对象、等等、放在不同的内存分块里、大概分为5块

1  栈

2  堆

3 BSS段-全局区-(静态区)

4 代码段

5 数据段

存放局部变量、临时变量、声明、返回值、指向堆对象的地址(指针)、总之存放一些小的东西、当不需要时候、栈会自动清除、比如一个加法方法里面、声明了两个int并赋值、这两个就是放在栈里面、类里面的8个基本变量常量类型、声明赋值以后都会在栈里、其他的放在堆里。注:(byte、short、int、long、char、float、double、boolean)(听说跟数据结构的栈很像、但是我学数据结构的时候其实就想到了这个栈)

存放new出来的对象、栈里面所有对象都是在堆里面有指向的、假如栈里指向堆的指针被删除、堆里的对象也要释放(C++需要手动释放)、当然我们现在好面向对象程序都有‘垃圾回收机制‘、会定期的把堆里没用的对象清除出去。

代码段

存放程序执行代码的一块内存区域、里面是二进制的代码、内存区域通常属于只读, 某些架构也允许代码段为可写,其实就是存放代码框架、或者说函数体、代码体的地方。

BSS段-全局区-(静态区)

上边是三个名字- -、找到的、差不多就那个意思、这个BSS段、就是存放为初始化的全局变量与未初始化的静态变量。

数据段

BSS段的是未初始化的、这个就像接他的班、数据段存放已初始化的全局变量和静态变量。

Data

BSS+数据段、包含这两个区段的叫数据区……其实我也不是很懂、大概就是BSS+数据段就叫Data区、就像   火烧+肉=火烧夹肉……

思维导图

例子程序

这是一个前辈写的,非常详细

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/12382249.html

时间: 2024-10-03 21:51:32

内存布局:栈,堆,BSS段(静态区),代码段,数据段的相关文章

解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

答: 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间:而通过new关键字和构造器创建的对象放在堆空间:程序中的字面量(literal)如直接书写的100."hello"和常量都是放在静态区中.栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用. String str = new String("hello"); 上面的语句中

c进阶1(堆,栈,静态区,代码区)

一.内存四大区域 1.栈 先进后出 栈的大小固定,默认1M,可以编译的时候设置,超出则溢出 变量离开作用范围后,栈上的数据会自动释放 栈是连续的,向上增长 #include<stdio.h> #include <stdlib.h> void go(); void main() { void *p1 = malloc(10); //p1,p2栈上 void *p2 = malloc(20); //00A0F914, 00A0F908 printf("%p,%p",

C语言的内存管理分析 栈区 代码区 堆区 静态区 常量区

系统为了管理内存 把内存划分了几个区域 1> 栈区 栈区之中的数据在栈区之中以栈的形式进行存储. 栈区的特点:数据是先进后出, 放在栈区里面存放的是局部变量.(例如定义在函数内部的变量) 栈区之中的数据(局部变量)的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理 2> 堆区 高效的使用内存 这里的内存可以由程序员自己手动管理 高效的使用内存  例如: 申请内存 释放内存.优化内存 ARC 申请内存的函数 malloc()  memary a

c执行文件内存布局

c语言在嵌入式.操作系统.图像处理方面应用广泛,是一种比较底层的语言.本文主要介绍c语言的内存分配,进程在内存中的布局. 环境: Linux zhuzhu 4.2.0-27-generic #32~14.04.1-Ubuntu SMP gcc version 4.4.7 首先上一张进程在内存中的布局图: 注:    该图仅表示进程在32位linux操作系统下的布局,对于windows内存布局并不是这样的,有兴趣的可以将下面的程序在VC6.0上运行试试,会发现与此布局相差很大. 从图中可以看到:

一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

各位看官们,大家好.上一回中咱们说的是C程序内存布局的样例,这一回咱们继续说该样例.闲话休提,言归正转.让我们一起talk C栗子吧. 看官们,关于C程序内存布局的样例,我们在前面的两个章回都介绍过了,这一回我们将对前面章回中的内容进行总结和提示. 内存布局总结 C程序的内存布局主要有四个分区:代码区,数据区(data和bss).堆区和栈区.能够使用readelf -S filename查看各个分区的内存地址.这四个分区在内存中从低地址空间開始依次向高地址延伸.我们再次使用前面章回中的图直观地展

elf文件格式和运行时内存布局

elf的类型: Linux下的可执行文件格式叫做elf,全称是Executable Linkable Format.其实不仅仅是可执行文件,linux中常见的目标文件有目标文件.o.可执行文件如/bin/bash.共享目标文件(.so).和核心转储文件core dump.可以使用file命令确定文件格式. elf的结构: 如其结构如下图所示: ELF file format: +---------------+ | File header | +---------------+ | .text

java对象的内存布局(一):计算java对象占用的内存空间以及java object layout工具的使用

最近在学习java对象内存布局方面的一些知识,主要是想知道一个java对象到底占用多少内存空间,以及java对象在内存中到底是什么样子的.c/c++中的sizeof运算符能够方便地告诉我们一个变量占用的内存空间,但是在java中却没有直接提供这种机制.如果想获取java对象占用的内存大小,可以利用java的Instrumentation机制.java.lang.instrument.Instrumentation这个接口提供了getObjectSize(Object objectToSize),

Oracle表空间、段、区和块简述

在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念.表空间.段.分区和数据块分别表示了Oracle进行数据存储的不同层次和结构.了解清楚这几个结构,有助于我们奠定一个稳固的学习基础,而且对于理解Oracle工作原理也有重要作用. 本文采用从小到大,逐步拓展的方式介绍四个结构,并且与Schema.数据文件的区别进行对比. 数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来

Java对象的内存布局

Java对象的内存布局:对象头(Header),实例数据(Instance Data),对齐填充(Padding):另外:不同的环境结果可能有差异,我所在的环境是HotSpot虚拟机,64位Windows. 对象头 对象头在32位系统上占用8bytes,64位系统上占用16bytes. System.out.println("sizeOf(new Object()) = " + sizeOf(new Object())); sizeOf(new Object()) = 16 实例数据