堆 and 栈

YOLOv9改进,YOLOv9添加CBAM注意力机制 CBAM是一个简单而有效的注意力模块,用于前馈卷积神经网络。给定一个中间特征图,我们的模块按顺序推断两个独立维度(通道和空间)的注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。由于 CBAM 是一个轻量级的通用模块,因此它可以无缝集成到任何 CNN 架构中,开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。论文链接:(CBAM论文) 阅读详情

一、预备知识—程序的内存分配

一个由c/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)

4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。


二、示例如下:

#include "stdio.h"
#include "string.h"
#include "malloc.h"

int variable = 0; //全局初始化区
char* p1;	//全局未初始化区

int main(char argc,char** argv) 
{ 
	int b = 0;			//栈 
	char s[] = "abc";	//栈 
	char *p2;			//栈 
	char *p3 = "123456"; //123456/0在常量区,p3在栈上,且指针内容不可修改。 
	static int c =0; //全局(静态)初始化区 
	p1 = (char *)malloc(10);	//分配得来得10和20字节的区域就在堆区。  
	p2 = (char *)malloc(20);	//动态分配得来的内存是不连续的
	
	strcpy(p1, "123456"); //123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
	
	return 0; 
}
三、堆和栈的申请

1、栈:当前系统中没有使用的栈空间大于申请的栈大小,就可以正常分配栈。否则,会报异常,提示栈溢出。

2、堆:其是操作系统用链表管理的空闲内存。从此可以看出,动态申请的堆空间是不连续的。当申请堆空间时,操作系统会遍历前面的链表,找到一个空间大于所申请的堆节点,然后将该节点赋予申请内存的指针变量,同时,将该堆节点从空闲链表中删除。同时,在大多数的操作系统中,当动态申请内存的时候,会将申请的空间大小记录在该块内存的首地址。这样delete才知道要释放多大的内存。也就是为什么我们可以这样释放申请的内存:delete [] p ;


四、堆和栈中的东东

堆:一般来说是在堆的第一个字节中存放该堆的大小,其他空间由程序员随意发挥。

栈:入栈的动作发生在调用函数开始时,出栈发生在调用函数完成时,需要恢复调用之前的“现场”。所以,在调用函数时,第一个进栈的是主函数中,被调用函数后的第一条可执行语句。然后是主函数的各个参数,在大多数C编译器中,参数的入栈顺序是:从右到左。然后是主函数中的局部变量。注意,静态变量是不入栈的。因为静态变量在全局区,所以没有必要。

在本次调用完成后,需要出栈。请注意出栈的顺序:和入栈刚好相反,是先进后出,即FILO。详细是:主函数的局部变量,主函数的参数,最后是被调用函数下一条可执行语句。程序从此处开始执行。


先写到这里,更深入的内容,等需要用的时候,在细细整理。


22、狭义相对论与曲线坐标空间相关知识解析 本文深入解析了狭义相对论与曲线坐标空间的核心概念,涵盖能量-动量张量的定义与守恒、曲线坐标系下的度量张量与基向量性质、协变与逆变张量的变换规则,并介绍了克里斯托费尔符号与协变导数的计算方法。进一步探讨了在弯曲空间中进行微积分运算的基础理论及其在广义相对论中的关键应用,如爱因斯坦场方程如何描述物质-能量对时空曲率的影响,为理解黑洞等引力现象提供了理论框架。 阅读详情

相关推荐

达梦DM8整合Seata AT模式实战:手把手教你搞定分布式事务(含源码修改避坑)

本文详细介绍了达梦DM8数据库与Seata AT模式的深度整合实战,包括环境准备、架构设计、源码适配及分布式事务落地。通过独创性源码改造,解决了Seata官方对达梦数据库AT模式支持的限制,为国产数据库在微服务架构中的应用提供了可靠的事务保障。

weixin_30764771的博客 332

什么时候用堆,什么时候用栈?

点击打开链接 参考文章: 《c++面试题之内存分配》见附录一: 一、首先,回顾一下c、c++的内存分配机制。  一个C、C++程序编译时内存分为5大存储区: 堆区、栈区、静态区(全局区)、文字常量区(储存字符串常量)、程序代码区(存放二进制程序) 下面主要阐述前面三个。 (1)静态存储区域: 静态存储区域的内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速

踏实每一小步,成就一大步 1万+

【Python・统计学】(两)多因素方差分析(原理及代码)

自学笔记,分享给对统计学原理不太清楚但需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)~(部分定义等来源于知乎) 本文重点:多因素方差分析 【1.多因素方差分析简单原理】 【2.多因素方差分析步骤】 【3.多因素方差分析代码】

TUTO_TUTO的博客 4864

Heap And Stack 堆 栈

2.Heap And Stack  Thinking in java第四章的内容是关于内存分配和初始化的,对这一章的学习带出了我以往学习中的一个模糊点:究竟什么是堆存储(Heap)?什么是栈存储(Stack)?有什么区别呢?翻了不少资料,补了这一课,觉得非常受用.  2.1 内存分配策略  按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.  静态存储分配是指在编

ridrare的专栏 1540

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 278

OpenFOAM-多孔介质模型(porous media)

文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通.

zq93538196的博客 9938

栈and堆

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

black_ben的专栏 1000

在 Windows 11 下运行 OminiParse V2,详细教程【含问题解决细节】

OmniParser V2 是微软推出的 GUI 智能体解析工具,可将屏幕截图转换为结构化元素,帮助 LLM 理解和操作界面。它在检测小图标和推理速度上显著提升,延迟降低 60%,并支持多种 LLM。

简简单单Onlinezuozuo 1087

堆and栈

java内存分析: 堆: 存放new的对象和数组 可以被所有线程所共享,不会存放到别的对象引用 栈: 存放基本变量类型(包含这个基本类型的具体数据) 引用对象的变量(会存放这个引用在堆里面的具体地址) 方法区: 可以被所有线程共享 包含了所有的class和static变量 ...

qq_43612371的博客 246

【PointNet++】制作点云数据集使用CloudCompare进行标注

使用PointNet++复现成功后,需要训练自己的数据集。于是使用cloudcompare参照ShapeNet的数据集格式去制作,最终保存的txt文件格式为“xyz+rgb+label”,一共7列。 自己按此制作好的数据集已成功训练及推测,于是记录下来让好兄弟好姐妹们少踩坑多吃肉。

纵马踏花向自由 5713

Heap And Stack 堆与栈的区别

交代一下背景,最近一直在看C++的相关知识,今天刚好看到“引用”这一部分。于是好奇心驱使,我想知道它与java的引用到底有什么不同,于是开始搜索大法,java的引用更加与c++的指针更加类似,但是也不一样,当然这不是重点。然后搜索的时候,突然又想知道在内存中的存储情况,于是开始搜索……,搜索……。对于heap与stack的区别我又模糊了,于是到了今天的重点,顺便记录一下自己搜索的成果。 英文好的同学

moon-sky的专栏 4374

提示工程架构师干货:AI上下文工程在社交媒体舆情溯源中的应用

在舆情溯源中,“上下文”不是单一的“文本内容”,而是多维度、多源的信息集合溯源时间:从事件爆发到找到源头,只用了24小时(传统方法需要3-5天);溯源准确性:100%(通过人工验证确认);后续行动:品牌X发布了澄清声明,揭露了品牌Y的恶意行为,舆情在48小时内平息。社交媒体舆情溯源是一个“复杂的系统工程”,需要结合数据、模型、上下文理解。AI上下文工程的出现,让我们从“被动应对”转向“主动溯源”,从“模糊判断”转向“精准分析”。

Java大师兄的博客 811

php 堆和栈的区别,Heap And Stack 堆与栈的区别

堆与栈的区别栈是上下顺序存储的,且“先进后出LIFO”规则,只能删除顶部的元素,而堆是没有特定的顺序的存储,您可以删除任意元素。堆分配需要维护分配的内存和未分配的内存的完整记录,以及一些开销维护以减少碎片,找到足够大以适应请求大小的连续内存段,等等。内存可以随时释放,留出自由空间。有时,内存分配器将执行维护任务,比如通过将分配的内存到处移动来对内存进行碎片整理,或者在运行时进行垃圾收集——当内存不...

weixin_39611049的博客 465

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

堆和栈(stack and heap)

1. 【堆】和【栈】的数据结构: [ 数据结构 ] 中的堆、栈是一种逻辑结构,因此是一种抽象的概念;而 [ 程序和进程 ] 中的堆、栈是一种存储结构,因而是一种“具体”或“物理”的概念; 堆是一种经过排序的【树形】数据结构,而栈是【线性】数据结构; 栈可以通过两种方式来实现:使用数组来实现栈,这种栈也称为静态栈;使用链表来实现栈,这种栈也称为动态栈。 2. 【堆】和【栈】的用途: 堆内存:存放new创建的【对象】和【数组】。(GC垃圾回收) 栈内存:存放【...

jim_007的博客 1874

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Heap And Stack 堆与栈

1.Heap And Stack    1.1 内存分配策略  按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.  静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计

陶佳裕的专栏 1151

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

堆和栈的区别(stack and heap)

栈是后进先出,堆是随便进出。---------------------都是一种数据结构,用于管理存储空间,     栈用于局部变量分配空间,   容量比较小     堆用于管理大块数据,   容量跟系统资源有关----------------------只从数据结构的方面说,栈是一种有序(filo)的结构,堆是无序结构。         而程序运行中的堆与栈是不同与上面的。汇编了解吗?比

camel0564的专栏 816

Stack and Heap 堆和栈的区别

在和计算机内存打交道时,我们一定会碰到堆和栈,这两个东西很容易搞混,那么现在就来梳理一下二者的关系。 栈是用来静态分配内存的而堆是动态分配内存的,它们都是存在于计算机内存之中。 栈的分配是在程序编译的时候完成的,直接存储在内存中,接触内存很快。栈是后进先出的顺序,最后被申请的块最先被释放,这样就很容易跟踪到栈,释放栈的过程简单到仅仅是移动下指针就能完成。 堆的分配是在程序运行时完成的,分配速...

ziyouniao719672119的专栏 383

堆和栈(heap and stack)

0x8000154 跳转到a_func,LR=0x80001be,保存执行到位置,PC=0x8000154,跳转到的位置。2、栈:也是一块内存空间,cpu的sp寄存器指向它,它可以用于函数调用、局部变量、多任务系统里保存现场。#将r3到r6寄存器和lr入栈,起站位作用。将0x41(65)放入r5寄存器。将0x(63)放入r0寄存器。将0x64(100)放入r0寄存器。

a1233219的博客 282

js stack and heap(js栈和堆)

先看一段代码: object function setName(obj) { obj.name = 'Nicholas'; obj = new Object(); obj.name = 'Greg'; } var obj = new Object(); setName(obj); alert(obj.name); //”Nicholas” 输出是什么呢?

ikscher的专栏 9683

栈和堆(the stack and the heap)

程序需要用到的内存可以分为四大类: 代码qiu

bdss58的专栏 741

JVM学习,堆和栈 —— What and where are the stack and heap?

The stack is the memory set aside as scratch space for a thread of execution. When a function is called, a block is reserved on the top of the stack for local variables and some bookkeeping data....

weixin_30457551的博客 111

栈和堆的区别

一、程序的内存分配方式不同 栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。 堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。 二、申请方式不同 stack 由系统自动分配,heap 需要程序员自己申请。 C 中用函数 ma...

Hustle Everyday 6万+

堆和栈的区别

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义: (1)程序内存布局场景下,堆与栈表示两种内存管理方式; (2)数据结构场景下,堆与栈表示两种常用的数据结构。 1.程序内存分区中的堆与栈 1.1 栈简介 栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。参考如下代码: int main() { int b; //栈 char s[] =

m0_46407213的博客 3553

什么是堆、栈以及区别

首先栈和堆(托管堆)都存在于进程的虚拟内存中,什么是虚拟内存呢 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 堆(Heap):是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程,C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系...

weixin_46269963的博客 5017
下一篇: va_list介绍
SingleCode
博客等级 码龄15年 11粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值