内存布局:栈,堆,BSS段(静态区),代码段,数据段
简介
我们程序运行的时候都是放在内存里的、根据静态、成员函数、代码段、对象、等等、放在不同的内存分块里、大概分为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区、就像 火烧+肉=火烧夹肉……
思维导图
例子程序
这是一个前辈写的,非常详细
原文链接:链接
内存布局:栈,堆,BSS段(静态区),代码段,数据段的更多相关文章
- Java内存分析--栈--堆
Java内存分析--栈--堆 JVM的内存分析: 1.栈内存 1.连续的存储空间,遵循后进先出的原则. 2.每个线程包含一个栈区,栈区只保存基础数据类型的对象和自定义对象的引用. 3.每个栈中的数据都 ...
- 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法
堆区:专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中) 1.存储的全部是对象 ...
- 浅谈c语言代码段 数据段 bss段
代码段.数据段.bss段 (1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. (2)代码段:代码段就是程序中的可执行部分,直观理解 ...
- c语言中静态区,栈,堆的理解
对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆. 很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚. 其实堆栈就是栈,而不是堆. 堆的英文是heap:栈的英文是stac ...
- PHP 堆 栈 数据段 代码段 存储的理解
对象在PHP里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢? 内存从逻辑上说大体上是分为4段,栈空间段.堆空间段 ...
- Linux从头学03:如何告诉 CPU,代码段、数据段、栈段在内存中什么位置?
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- 内存布局------c++程序设计基础、编程抽象与算法策略
图中给出了在一个典型c++程序中如何组织内存的框架.程序中的指令(在底层都是按位存储的).全局变量.静态对象和只读常量往往被存储在静态去(static area)(第二个图中的数据段.代码段.值得注意 ...
- C++ 系列:内存布局
转载自http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html 为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内 ...
- C/C++内存布局及对齐
1.源文件转换为可执行文件 源文件经过以下几步生成可执行文件: 1.预处理(preprocessor):对#include.#define.#ifdef/#endif.#ifndef/#endif等进 ...
随机推荐
- stark组件base.html
stark 组件基础页面base.html 文件 base.html 1. base.html 页面是 : stark组件增,删,改,查页面的公共部分,如头部导航栏,左侧的用户权限列表栏等. 2. b ...
- 21. Merge Two Sorted Lists (Java 合并有序链表 空间复杂度O(1))
题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...
- 4月22 mysql常用函数
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...
- Leetcode 124 *
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- img 标签
设计网页时经常使用的图片有三种,它们的相同点是都经过了压缩,压缩比越高,图像品质越差. GIF(Graphics Interchange Format):最多支持256色,支持透明,支持多帧动画显示效 ...
- 网页定位点击事件js响应函数教程(Chrome)
一.背景说明 在前端页面调试或者渗透测试(尤其是XSS)时,我们经常想定位js函数位置:比如点击了某个位置弹出了一个对话框,这是哪个文件的哪个js函数在响应. 本文以Chrome浏览器定位点击事件响应 ...
- weblogic安装教程(以weblogic 11g为例)
1.下载jdk和weblogic安装介质 一般的搭配是jdk1.5+weblogic92.jdk1.6+weblogic11g(weblogic10.3.6) jdk历史版本下载链接:http://w ...
- 把旧系统迁移到.Net Core 2.0 日记 (15) --Session 改用Redis
安装Microsoft.Extensions.Caching.Redis.Core NuGet中搜索Microsoft.Extensions.Caching.Redis.Core并安装,此NuGet包 ...
- ElasticSearch安装部署(Windows)
测试版本:elasticsearch-5.1.1 1.解压elasticsearch-5.1.1.zip. 2.执行elasticsearch.bat启动服务,启动画面如下: 3.访问ElasticS ...
- shell 数值运算
declare数值运算 linux默认变量类型为字符串 declare [+/-] [选项] 变量名 '-' 给变量设定类型属性 '+' 取消变量的类型属性 '-a' 将变量声明为数组型 '-i' 将 ...