`
zjx2388
  • 浏览: 1337667 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

堆栈,stack和heap

    博客分类:
  • J2EE
 
阅读更多

今天突然又想到了堆栈,顺便就问了下Cary,以下是他给的答复:

 

堆是stack,栈是heap

 

heap一般就是存储实例的,比如你new一个什么,他一般就存储在heap里

 

(1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack


(2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。
(3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。
(4)而要使用heap中申请的变量或对象只能定义变量指针,并要求在运行过程中通过new来动态分配内存空间,而且必须显示地

free你申请过的内存,不过Java的垃圾回收机解决了这个问题,它会帮你释放这部分内存。
(5)stack中变量的大小和个数会影响exe的文件大小,但速度快。堆中的变量大小与exe大小关系不大,但分配和释放需要耗费的

时间远大于stack中分配内存所需的时间。

 

有点像内存,和硬盘的关系

分享到:
评论

相关推荐

    C语言stack和heap

    在C/C++编程中,内存管理是至关重要的一个部分,主要分为栈(stack)和堆(heap)两个区域。理解这两个概念以及它们的区别对于优化程序性能、避免内存泄漏至关重要。 栈是程序运行时系统自动分配的一块内存区域,...

    java中堆(heap)和堆栈(stack)有什么区别

    "Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的...

    stack&heap

    1. **栈区(Stack)** 栈是程序运行时由编译器自动分配和释放的内存区域。它遵循“先进后出”(LIFO,Last In First Out)的原则,主要用于存储函数参数值和局部变量。栈的操作速度快,因为它由硬件直接支持。栈的...

    stm32cubemx freertos 堆栈使用情况显示demo

    总结,这个“stm32cubemx freertos 堆栈使用情况显示demo”旨在教开发者如何利用STM32CubeMX和FreeRTOS进行实时的堆栈监控,这对于优化任务分配、预防堆栈溢出以及提高系统稳定性至关重要。通过学习这个示例,你可以...

    堆(heap)与栈(stack)的区别

    堆(heap)与栈(stack)是计算机内存管理中的两种基本数据结构,用于存储程序运行时产生的临时变量。在C语言中,这两种内存区域有非常明确的区分,对于理解程序的内存分配和回收具有重要意义。 首先,栈是一种特殊...

    STM32 堆栈检测示例

    文件`H743_stack-heap_detect.ioc`可能是STM32CubeIDE的工作区文件,用于配置和管理项目。`.mxproject`是Keil μVision的项目文件,记录了项目的编译设置和依赖库。`MDK-ARM`目录可能包含了Keil MDK的编译工具链。`...

    ADS1.2进行嵌入式软件开发(下).pdf

    首先,堆栈和heap的初始化是通过_USER_INITIAL_STACKHEAP函数进行的。这个函数在C库初始化阶段被调用,用于设定堆栈和heap的起始位置和大小限制。开发者可以使用C或汇编语言重写这个函数,返回heap的基地址、堆栈基...

    关于堆栈的详细介绍

    通过对堆栈的基本概念及其在数据结构与程序内存管理两个维度的深入探讨,我们不仅了解了堆栈各自的特点和应用场景,还掌握了它们之间的主要区别。对于C/C++程序员而言,深入理解这些概念有助于提高编程效率,避免...

    嵌入式笔试题汇总1.pdf

    程序段b展示了变量在内存中的可能布局,包括栈(stack)、堆(heap)、数据(data)和BSS(Beginning of Static Storage)段。变量`a`和`b`是全局变量,存储在数据或BSS段;`c`是静态局部变量,存储在BSS段;`d`和`e`是栈上...

    堆栈和托管堆

    堆栈(Stack)主要用于存储基本数据类型和函数调用时的上下文信息,而堆(Heap)则是用于存储复杂对象和动态分配的内存。 堆栈按照后进先出(LIFO)的原则进行管理,其速度较快,但由于空间有限,适用于存储生命...

    操作系统中的堆栈的经典解释

    在计算机科学与软件工程领域中,堆栈(Stack)与堆(Heap)是两种极为重要的内存管理机制。它们不仅对于编程语言的设计至关重要,而且直接影响程序运行时的性能与稳定性。本文将深入探讨操作系统层面的堆栈概念及其...

    基于Linux的堆栈溢出攻击和防御研究.pdf

    Linux操作系统的堆栈结构包括.text、.data、.bss、heap和stack五部分。其中,.text段存放程序的代码,.data段存放已初始化的静态变量,.bss段存放未初始化的数据,heap段存放动态分配的内存,stack段存放临时变量和...

    使用ADS1.2 进行嵌入式软件开发(下)

    本篇文章将更深入地介绍如何管理和优化存储器分配、初始化系统,特别是通过使用heap和堆栈的管理技术来提升程序效率。 #### 存储器分配与初始化 **堆栈和heap的管理**是嵌入式系统开发中极为重要的环节之一,特别...

    关于堆栈(mac堆栈操作文档)

    在Mac OS X Leopard中,通过合理地使用堆栈和堆(heap),可以有效地减少内存泄漏的风险。 综上所述,虽然原始文档的内容难以直接解析,但从标题和描述中我们可以了解到堆栈在Mac OS X Leopard操作系统中的重要性和...

    堆栈内存区别

    在计算机编程与运行环境中,堆栈(Heap vs Stack)是两种关键的数据存储区域,它们各自拥有独特的属性与管理方式,对于程序的性能与资源管理有着深远的影响。本文将深入解析堆栈的区别,探讨它们在内存分配、生命...

    使用ADS1.2进行嵌入式软件开发(下).pdf

    在双区域模型下,必须在执行`_user_initial_stackheap()`时指定堆栈限制值,以防止越界错误。 #### 系统复位与初始化 系统复位和初始化是嵌入式软件开发中的基础步骤。通常,程序从C库函数的初始化入口`_main`开始...

    堆栈的名词解释

    在计算机科学领域,堆栈(Stack)与堆(Heap)是两种非常重要的内存管理机制,它们各自有着独特的特性和应用场景。堆栈的名词解释主要是为了帮助大家增进对这两种数据结构的理解。 #### 二、堆栈的定义及特点 ####...

    cubeMx heap-stck

    标题“cubeMx heap-stck”暗示了我们讨论的主题是关于使用CubeMX配置工具在嵌入式系统中管理堆栈(stack)和堆(heap)内存。CubeMX是STMicroelectronics提供的一个集成开发环境(IDE),用于配置和初始化基于STM32...

    栈和堆栈的区别和联系

    标题和描述中的核心知识点主要集中在计算机科学领域中的数据存储机制,特别是栈(stack)和堆(heap)的区别和联系。为了深入理解这些概念,我们不仅需要掌握它们的基本定义,还要了解它们在实际编程中的应用以及与其他...

    STM32堆栈内存分析

    本篇文章主要针对STM32微控制器的堆栈内存进行深入分析,旨在帮助开发者理解STM32如何管理和使用内存资源,特别是堆栈区的具体工作原理。 #### 二、STM32内存区域划分 STM32的内存分为多个不同的区域,每个区域都...

Global site tag (gtag.js) - Google Analytics