堆和栈的笔记

工作笔记-堆 和 栈总结 存储局部变量、函数参数、返回地址等。由操作系统自动管理,效率高,空间较小,但生命周期短,适合短期数据存储。 阅读详情

堆和栈的笔记

内存泄漏

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存溢出

内存溢出(out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。

堆和栈的定义

  • 堆栈空间分配
    栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

  • 堆栈缓存方式
    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
    堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

  • 堆栈数据结构区别
    堆(数据结构):堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。
    栈(数据结构):一种先进后出的数据结构。

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

  • 变量的存储方式

存储描述持续性作用域链接性如何声明
自动自动代码块无在代码块中
寄存器自动代码块无在代码块中,使用关键字 register
静态,无链接性静态代码块无在代码块中,使用关键字 static
静态,外部链接性静态文件外部不在任何函数内
静态,内部链接性静态文件内部不在任何函数内,使用关键字 static
  • 注意:链接性为外部的变量通常简称为外部变量,它们的存储持续性为静态,作用域为整个文件。外部变量是在函数外部定义的,因此对所有函数而言都是外部的。如果要在多个文件中使用外部变量,只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须使用关键字extern声明它:

https://baike.baidu.com/item/%E5%A0%86%E6%A0%88/1682032?fr=aladdin#3_2

内核的定义

内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

分页查询

当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。
解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
打一个比方,有很多很多人要过河,而只有一条船摆渡。若让所有人都上船,肯定会导致沉船(资源耗尽);若换一条超大的船,除了换船要很高的成本外,上船下船也要耗费很长时间。
所以最好的解决方法是,根据船的容量,每次只上一部分人。等这一船人过河以后,再摆渡下一批人。

3个国产AI大模型实战:如何用DeepSeek+豆包+千问批量生成高质量测试用例(附完整代码) 本文详细介绍了如何利用DeepSeek、豆包和千问三大国产AI大模型批量生成高质量测试用例的实战方法。通过Python环境配置、多模型SDK安装和统一接口封装,实现高效测试用例生成,并结合结构化提示词设计和多模型结果对比分析,显著提升测试效率和覆盖率。 阅读详情

相关推荐

【PT+Arduino+OneNET基础教程1】PacketTracer中MCU芯片编程教程(零基础入门)

PacketTracer软件内MCU芯片编程入门 零基础

ChloeMax_的博客 9451

C/C++中堆和栈的区别

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操作方式类似于数据结构中的栈。    2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   。注意它与数据结构中的堆是

WonderChaos的博客 548

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1421

[笔记]堆和栈的区别 面向C++

c++中的内存分配一般分为一下几个部分: 堆 程序员请求 栈 系统分配 全局区(静态区) static 全局变量和静态变量的存储;初始化后的全局和静态变量存在一个区域,未初始化的全局变量和静态变量存在相邻的另一个区域 文字常量区:字符常量存储在这里;结束后由系统释放 程序代码:函数体的二进制代码;结束后由系统释放 //main.cpp int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() {

qq_33882682的博客 172

深入STM32 USB OTG FS:从官方MSC例程到实战双存储设备移植全记录

本文详细解析了STM32 USB OTG FS在双存储设备开发中的实战应用,从协议栈底层机制到SD卡/SPI Flash同步挂载的实现。通过优化SDIO接口和SPI Flash驱动,结合USB MSC类的关键实现,提供了完整的解决方案和性能优化策略,适合嵌入式开发者参考。

weixin_28366475的博客 366

SQL Server 内存占用高分析及解决办法(超详细)

如果想让 Sql Server 主动释放 占用并空闲的内存空间,可以设置Sql Server占用内存的上限,就会让Sql server在。如执行存储过程,自定函数时,SQL Server 需要先二进制编译再运行,编译后的结果也会缓存起来,再次调用时就无需再次编译。才会释放一点占用的内存,所以很多时候,我们会发现运行SQL Server的系统内存往往居高不下这些内存一般都。缓存,以便于再次请求此页的数据的时候,直接从内存返回,就无需读取磁盘了,大大提高了速度。最后文章有啥不对,欢迎大佬在评论区指点!

2301_79080944的博客 3951

栈和堆、方法、缓存的笔记

管理方式:栈自动释放,堆需要GC空间大小:栈比堆小 碎片相关:栈产生的碎片远小于堆 分配方式:栈支持静态和动态分配,而堆仅仅支持动态分配 效率:栈的效率比堆高

weixin_54420332的博客 376

使用AutoDL云服务器训练YOLO计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤

AutoDL AI算力云是一个提供人工智能算力服务的云平台。丰富的GPU资源:提供多种GPU型号,包括NVIDIA的A100A800L40V100RTX 4090RTX 3090等,能满足我们在不同场景下的需求,无论是进行大规模的AI训练还是复杂的科学计算等任务,都可以找到合适的GPU资源。灵活的付费方式:支持按量付费包日包周包月等多种付费模式。对于短期的实验或不确定时长的项目,可以选择按量付费;如果有长期稳定的算力需求,预付费或包周包月则可能更划算,可以根据自己的需求和预算进行选择。集成主流框架:集成了。

Limiiiing的博客 955

笔记:堆和栈各自的特性

堆栈特性

m0_71847201的博客 392

10、高阶ΣΔ调制器设计与优化

本文深入探讨了高阶ΣΔ调制器的设计与优化技术,重点介绍了NTF零点优化方法,通过分散单位圆上的零点分布提升信噪失真比(SQNR)。文章分析了量化噪声耦合技术如何有效提高噪声整形阶数,并对比了CIFB、CIFF、CRFB和CRFF等不同架构的性能特点。同时,详细阐述了基于稳定性与性能权衡的设计流程,结合Schreier的Delta-Sigma Toolbox实现NTF综合与仿真验证。内容涵盖从理论推导到实际设计步骤,为高阶ΣΔ调制器的稳定性提升与性能优化提供了系统性指导。

tgb345678的博客 134

ROS2 - 乐动激光雷达 LD06

STL-06P 主要由激光测距核心,无线传电单元,无线通讯单元,角度测量单元、电机驱动单元和机械外壳组成。STL-06P 测距核心采用 DTOF 技术,可进行每秒 5000 次的测距。每次测距时,雷达发射出红外激光,激光遇到目标物体后被反射到单光子接收单元。

机器人控制与仿真应用 3482

学习笔记—堆和栈

数据结构的堆和栈 堆和栈都是一种数据项按序排列的数据结构。 栈: 后进先出性质的数据结构。 ——就像纸牌,在底部(先放)后抓,在顶部(后放)先抓。 堆: 经过排序的树形数据结构,每个结点都有一个值。 通常我们所说的堆的数据结构,是指二叉堆。 特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。 由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取

weixin_42645653的博客 194

PyTorch 面试题及详细答案120题(54-70)-- 模型训练与评估

本文介绍了PyTorch模型训练的基本流程和核心概念。主要内容包括: 模型训练基本流程:通过代码示例展示了数据准备、模型定义、损失函数和优化器选择、训练循环(前向传播、反向传播、参数更新)的完整过程,并包含验证集评估的实现。 训练过程中的关键概念: Epoch:完整遍历一次训练集 Batch:将数据分成小批次 Iteration:一个Batch的参数更新过程 三者关系:1 Epoch = N/B Batch = N/B Iteration(N为样本数,B为batch_size) PyTorch数据加载机制:

大剑师兰特的GIS世界 488

Java堆.栈和常量池 笔记

一 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中(String str = new String() , str(对象引用存在栈里) , new String()(对象存在堆里)). 3. 堆:存放所有new出来的对象。或者常量池中(字符串常量对象存放在常量池中。) 4. 静态域:存放静态成员(s...

Smile__1的博客 686

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

笔记(栈和堆)

堆的大小通常比栈大得多,它的分配和释放由程序员显式地控制,如使用`new`(C++)或`malloc`(C语言)分配内存,再使用`delete`或`free`来释放堆上分配的内存。1. 栈(Stack):栈是一种后进先出(LIFO)的数据结构,用于管理程序中的局部变量和函数调用。栈的大小是在程序编译时确定的,它提供了一块有限的内存空间用于存储函数的参数、局部变量和函数的返回地址等。栈的分配和释放是自动进行的,由编译器或运行时系统控制。是的,栈(Stack)和堆(Heap)是两个常见的内存分配和管理概念。

unicornff的博客 127

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RTOS笔记绍--堆和栈

而堆在分配释放过程中会涉及链表操作的部分,每分配一个堆就需要设置一个堆头,用于储存堆起始位置和大小,而想要进行空闲管理则需要一个全局结构体用于储存下一个空闲地址位置及其大小。在跳转后优先保存LR,在函数b执行完后属于函数b的栈被收回再次作为函数c的栈保存LR,因此可以使得LR不被覆盖。在代码汇编跳转时,每个函数都会在开头将LR中的值保存到栈中,因此BL跳转指令记录的LR和PC不会被覆盖。:堆即是一块空闲内存,我们可以管理这块内存,从内存中取出一部分,用完后可以再释放掉。

HUOHUAAARSGJKD的博客 461

关于对java栈和堆的理解和笔记

基本数据类型和局部变量是存放在栈内存中的,用完就消失new创建的实例对象和数组是存放在堆内存中的,用完之后靠垃圾回收机制不定时自动消除。栈和堆的特点栈:函数中定义的基本类型变量,对象的引用变量都在函数的栈内存中分配。栈内存特点,数数据一执行完毕,变量会立即释放,节约内存空间。栈内存中的数据,没有默认初始化值,需要手动设置。 堆:堆内存用来存放new创建的对象和数组。堆内存中所有的实体都有内存地址值...

weixin_40021273的博客 203

windows堆和栈学习笔记

堆(内存) 堆表示程序可用的内存区,也叫动态内存区。堆内存的分配与释放次序是随机的,这就是说,如果你按次序分配三块内存,那么到时并不按分配时的次序释放内存。 堆管理器会负责所有操作,你只需简单地使用GetMem 函数请求新内存或调用constructor 建立对象, Delphi 会返回一个新的内存块(随意重用已经丢弃的内存块)。 堆是应用程序可用的三种内存区之一, 其它两种分别是全局内存

苏生-苏米沿的专栏 1495

牛客网刷题笔记---堆和栈

JVM 关于堆和栈 Java 把内存划分成两种:一种是栈内存,另一种是堆内存。 栈式存储: 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。 优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。 缺点:存在栈中的数据大小与生存...

大Z小z的博客 281

【笔记】C++的内存管理堆和栈

C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。 堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉,资源将由操作系统在程序结束后自动回收。 自由存储区:是由malloc等分配的内存块,和堆十分相似,用free来释放。 全局/静态存储区:全局变量和静态变量被分配到同一块.

诸葛灬孔暗 396

程序栈区和堆区内存分配笔记

今天在看java数组建立过程,对java的内存分配还有点迷迷糊糊的,就写点笔记便于日后查询。 下面这两篇博客感觉写的很好很细,感觉帮助很大就转来保存一下: Java内存分配之堆、栈和常量池 浅析栈区和堆区内存分配区别 Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:...

小黑炮的博客 394

Qt笔记6:堆和栈的区别

看了理论如果不清楚可以看下边代码: int a = 0; //全局初始化区 char *p1; //全局为初始化区 int main(int argc, char *argv[]) { int b; //栈区 char s[] = "abc"; //栈区 char *p2; //栈区 char *p3 = "123456";//"123456/0"在常量区,p3在栈区 static int c =.

weixin_42962516的博客 822

java堆和栈学习笔记

在java中栈是用来存储函数的主体和变量名的,java的代码是在函数体中执行的,函数主体会放在栈内存中。栈运行是先进后出的,如栈最底层的函数是main,其上是自己编写的一系列函数,运行时是先运行自己编写的函数再运行main函数(入栈出栈的顺序)...

小黄人的博客 292

JVM学习笔记之二:栈和堆

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33937913的博客 103
上一篇: 基于TCP的客户端、服务器端socket编程
下一篇: 剑指Offer(第二版)面试题14:剪绳子
xy_cpp
博客等级 码龄10年 119粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值