文档章节

关于堆栈

yintao
 yintao
发布于 2013/07/04 07:10
字数 421
阅读 23
收藏 0
点赞 0
评论 0

堆栈的区别体现在两个层面:

一。操作系统方面
1.堆区:由用户自己分配与释放内存的区
2.栈区:由编译器自动分配内存的区,一般是局部变量,函数参数

注:除了上述两个区,还有静态区(全局变量,静态变量),字符串常量区(字符串常量)。

    这些都是内存中的区,这里复习一下:

    一个由c/C++编译的程序占用的内存分为以下几个部分
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
    3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
    4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
    5、程序代码区—存放函数体的二进制代码。

二。数据结构方面
1.堆:以数组存储的完全二叉树。若为最大堆则,子节点的值不大于父节点,最小堆则不小于。
2.栈:先进后出的顺序表。

© 著作权归作者所有

共有 人打赏支持
yintao
粉丝 5
博文 54
码字总数 45783
作品 0
大连
程序员
CX0069:错误:变量需要堆栈帧?

这段来自《C语言深度剖析》关于指针的部分 #include int main() { // int i=10; int p=(int )0x00bef95c;//0x00be95c是变量i的地址 *p=NULL;//这一行的问题 p=NULL; return 1; } 在VS2010下测...

SBaof ⋅ 2014/12/19 ⋅ 4

关于查看混淆后log查看问题

前面记录了两篇关于如何做混淆的文章,但混淆之后,如果遇到问题,log日志是无法查看的,对应的都是混淆后的类、方法,这时候就需要用retrace.bat指令(retrace.bat|retrace.sh [-verbose] m...

tyronejw ⋅ 2016/01/13 ⋅ 0

Ruby企业版(REE)调优

本篇文章如果有订阅Ruby5的童鞋们应该知道的。 最近国外的一个同行Bryan Liles做过一个对RubyEE下执行测试的的评测: 未调优前: 调优后: 差距怎么这么大呢? 可以去看看REE官方文档关于GC性...

blackanger ⋅ 2010/11/03 ⋅ 0

virjar/xposedhooktool

hook base工具 Android 破解的hook工具,集成一些帮助破解的常用功能,如自动网络抓包、网络堆栈爆破、文件日志、webview调试环境 入口在 com.virjar.xposedhooktool.hotload.XposedInit,但是...

virjar ⋅ 04/22 ⋅ 0

Delphi中实现变长函数笔记

前面从网络中收藏加转贴了一部分关于变长参数函数的笔记。反正休闲没事,于是就专门的研究研究了如何用Delphi来实现类似于C语言中Printf这种可以传递任意多个参数的函数。这个实际上来说也不...

不得闲 ⋅ 2013/05/09 ⋅ 0

Android Activity概要

一个Activity是提供给用户的用于与程序进行交互的界面组件,如打电话、拍照片、发邮件、或看地图等。每个Activity就是一个用来描画用户界面的接口,通常这个窗口时全屏的,但是也可以比屏幕小...

长平狐 ⋅ 2012/10/16 ⋅ 0

WCF后传系列(8):深度通道编程模型Part 1—设计篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节都是由通道堆栈来处理的。为了简化这些处理,在...

lihuijun ⋅ 2008/11/11 ⋅ 0

log4j2之简化封装,告别静态成员变量

注 本文是使用 slf4j + log4j2 示例,由于 slf4j 只是一个统一接口包,log4j / log4j2 / logback 等都是有其实现类,所以本文中是以 slf4j 为例。若有朋友坚持不使用 slf4j ,则将代码中 sl...

倚楼听风雨_ ⋅ 2016/10/15 ⋅ 22

Android Fragment---管理Fragment

要管理Activity中Fragment,需要使用FragmentManager对象,在Activity中调用getFragmentManager()方法能够获得这个对象。 FragmentManager对象能够做以下事情: 1. 获得Activity中既存的Fra...

长平狐 ⋅ 2012/10/16 ⋅ 0

Java编程思想: 一切都是对象

用引用操纵对象 编程语言根据如何操作内存中元素分为两种, 一种是C/C++之类: 通过特殊语法来操纵, 例如指针. 一种是Python,Java之类, 使用引用操纵对象. 这就是为什么Python中存在id这个函数...

fzyz_sb ⋅ 2016/07/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部