文档章节

关于堆栈

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

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

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

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

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

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

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

© 著作权归作者所有

共有 人打赏支持
yintao
粉丝 6
博文 63
码字总数 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
862
4
关于查看混淆后log查看问题

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

tyronejw
2016/01/13
1K
0
从JS引擎理解Await b()与Promise.then(b)的堆栈处理

译者按: Async/Await真的只是简单的语法糖吗?No! 原文:Asynchronous stack traces: why await beats .then() 作者: Mathias Bynens: Google V8引擎开发者 译者:Fundebug 为了保证可读性...

Fundebug
08/08
0
0
virjar/xposedhooktool

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

virjar
04/22
0
0
Delphi中实现变长函数笔记

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

不得闲
2013/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
6
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
4
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部