`
lg_asus
  • 浏览: 184617 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

栈空间分配

 
阅读更多
内存分堆和栈,堆是动态分配的,new,malloc等都是在堆上分配内存,需要手工回收或平台回收。栈用于分配局部变量、方法参数、返回地址,方法运行结束后自动回收。
对于静态类型语言,在编译期就能知道这个方法有哪些局部变量、参数,占用的内存大小也是确定的,因此可以直接在栈上分配,这种叫做栈的静态分配。对于python,javascript这种动态数据类型(python和javascript是一切皆对象语言),在程序运行之前是不能知道局部变量、参数占用多少字节的,因此局部变量和参数可能都是在堆上分配的(这个不确定,猜测)。

对于栈的静态分配,如下面代码(java):
void foo(){
 int a=0;
 int b=1;
 print(a);
}


在压栈的时候,a比b先,因此b是栈顶,这个时候如果按数据结构中的想读取a只能通过弹栈是不行的,这个时候知道栈顶指针和偏移量,可以算出a的地址,通过地址就能直接读取a了,并不是说要弹栈,参考:http://blog.csdn.net/chenlycly/article/details/37912683
另外Q群大牛推荐看一本书:CSAPP(Computer System: A Programmer Perspective)。
分享到:
评论

相关推荐

    Java中堆内存与栈内存分配浅析

    本文分析了Java中堆内存与栈内存分配的异同

    pthread之线程堆栈分配 日志.doc

    linux pthread,栈空间分配,及怎样查看其空间大小

    两个堆栈共用存储空间

    两个栈分配合理的存储空间。。如果一个程序中要用到两个栈,为了不发生上溢错误,就必须给每个栈预先分配一个足够大的存储空间。若每个栈都预分配过大的存储空间,势必会造成系统空间紧张。如何解决这个问题?

    java实现内存动态分配

    局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 java实现内存动态分配目录 一.实验原理 二.实验流程图 三.实验代码 四.实验结果

    C,C++内存分配的详细讲解包括堆,栈,数据段等

    C,C++内存分配的详细讲解包括堆,栈,数据段的分配管理

    Java栈内存与堆内存

    Java把内存划分成两种:一种是栈内存,一种...当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

    堆内存分配

    在进程私有的内存里分配,又有两种分配情况,一种上基于栈式的内存分配,另一种是基于堆内存的分配。在c++里使用堆内存分配是使用HeapAlloc函数来实现的,也就是实现new操作符分配内存时会调这个函数。

    数据结构 主要是栈 含有课件 练习

    1. 栈的基本概念 2. 栈的顺序存储表示...(1)顺序栈动态分配存储空间方法 和对栈操作设计 (2)顺序栈静态分配存储空间方法 和对栈操作设计 * 3. 栈的链式存储结构——链栈 顺序栈静态分配存储空间方法 和对栈操作设计

    C语言 栈的基本操作

    #define STACKINCREMENT 10 // 存储空间分配增量 typedef int SElemType; // 定义栈元素类型 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 struct SqStack { SElemType *base; // ...

    UC/OS-II的内存管理OSMemCreate()分析

    我们在写应用程序的过程中通常都是采用一个malloc/free系列函数进行内存的管理,这样分配的内存空间是从应用程序的栈空间分配处理,一般而言我们在写程序的过程中要对内存空间进行适时的释放,才不至于导致栈空间的...

    指针的指针,引用,指针的引用,以及动态内存分配malloc讲解

    要理解malloc函数就必须理解指针的指针,引用,指针的引用,以及动态内存分配。 程序中的内存分为两种:栈内存和动态内存。 静态声明定义变量都是在栈内存中分配空间,在栈空间中会...这里的空间分配是在栈空间的。

    顺序栈的实现.zip

    #define MAXSIZE 100//顺序栈存储空间的初始分配量 typedef int Status; typedef char SElemType; typedef struct { SElemType *base;//栈底指针 SElemType *top;//栈顶指针 int stacksize;//栈可用的...

    堆内存和栈内存详解 ESP

    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与...

    Java中堆和栈的区别

    String中==与equals区别验证!...当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

    C语言内存分配详解

    堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局区:用来存放全局变量和...

    顺序栈通常使用数组来实现,其特点是在栈底预先分配好一块存储空间,栈顶指针指向栈顶元素 以下是一个简单的Java实现:.txt

    顺序栈的实现

    用 C 语言实现顺序栈的示例C&C.zip

    InitStack:初始化顺序栈,分配内存空间。 StackEmpty:判断栈是否为空。 StackLength:获取栈内元素数量。 ClearStack:清空顺序栈。 DestroyStack:销毁顺序栈,释放内存。 Push:将元素入栈。 Pop:出栈并获取...

    java内存分配详解

    栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动 释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。 堆内存用来存放由 new ...

    C++开发及测试人员复习资料

    当调用完此函数返回的时候,栈空间自动被收回,其中的内容也就全部无效了。而new是在堆中分配内存的,而且一经分配则永久保留,直到显式的以delete运算符来释放掉。如果不进行delete,则会造成内存泄露。

Global site tag (gtag.js) - Google Analytics