美文网首页
C语音中的堆和栈

C语音中的堆和栈

作者: 一叶知秋0830 | 来源:发表于2019-06-27 11:28 被阅读0次

说起堆和栈,很多人的第一反应就是2种数据结构,栈是一种具有后进先出特性的数据结构,堆是一种树形数据结构。不过我这里要说的是内存分配中的栈空间和堆空间。

1.栈空间

栈是系统自动分配空间的,也是由系统自动回收的。当我们执行一个函数时,操作系统会分配一小段栈空间,先将参数压入栈中,然后将函数中定义的局部变量压入栈中,当函数执行结束时,局部变量先出栈,然后参数出栈,然后这段栈空间会被系统回收掉。这也是为什么函数局部变量在函数外部不能访问的原因。一般系统分配的栈空间很小,只有几兆。

2.堆空间

堆空间是程序员自己向系统申请分配的空间,堆空间是很大的,有几个G,所以要分配一大段空间的话都是从堆空间分配。一个函数中如果申请了一段堆空间,即使函数执行结束,外部依然可以访问这个堆空间。比如我们要申请一段堆空间来存放一个int类型的变量,可以这样写,int *a; a=(int*)malloc(sizeof(int));申请的堆空间大小是sizeof(int),也就是int类型数据的大小,a是一个指针,它指向这个堆空间,函数外部可以通过指针a访问这个堆空间。我们程序中的指针一般都是指向堆空间。
申请堆空间后,当不需要再使用这段空间时一定要主动释放,系统不会自动释放,不主动释放的话就会造成内存泄露。

相关文章

  • C语音中的堆和栈

    说起堆和栈,很多人的第一反应就是2种数据结构,栈是一种具有后进先出特性的数据结构,堆是一种树形数据结构。不过我这里...

  • 线性表和队列

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区...

  • Android NDK开发之旅3--C语言基础--内存分配

    C语音里面的内存划分 栈区(栈内存,存放局部变量,自动分配和释放,里面函数的参数,方法里面的临时变量) 堆区(动态...

  • [Java 编程思想]第二章

    1. java是基于C++ 2. 堆和栈的区别 栈和堆都是java用来在Ram中存放数据的地方,java自动管理栈...

  • C# 中的栈和堆

    本文是《C# 图解教程》的笔记。 程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、...

  • 什么是堆栈,以及堆栈的区别

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”,OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会...

  • iOS 堆和栈的区别

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”,OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会...

  • java堆、栈、堆栈的区别

    1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆...

  • C#中的堆和栈理解

    引言:程序运行时,它的数据必须存在内存中,一个数据需要多大内存、存储在什么地方以及如何存储都依赖于该数据的数据类型...

  • 2021UpdateC#.NET笔试题基础篇

    1.C#中堆和栈的区别? 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。堆:一般由程序员分配释放。用...

网友评论

      本文标题:C语音中的堆和栈

      本文链接:https://www.haomeiwen.com/subject/kmelcctx.html