首页 > 系统相关 >栈区、堆区,内存分区模型

栈区、堆区,内存分区模型

时间:2024-03-09 18:48:43浏览次数:23  
标签:栈区 int 堆区 局部变量 内存 func new

1.栈区

由编译器自动分配释放,存放函数的参数值,局部变量等

注意事项:

不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

实例代码:

#include <iostream>

using namespace std;

int *func() {
    int a = 10; //局部变量,存放在栈区,栈区的数据在函数执行完后自动释放
    return &a; //返回局部变量的地址
}


int main() {
    int *p = func(); //接收func函数的返回值
    cout << *p << endl; //第一次可以打印正确的数字,是因为编译器做了保留
    cout << *p << endl; //第二次这个数据就不再保留了,打印失败
    cout << *p << endl; //同理
    return 0;
}

 

 

2.堆区

由程序员分配释放,若程序员不释放,程序结束时由操作系统自动回收

在c++中主要利用new在堆区开辟内存

实例代码:

#include <iostream>

using namespace std;

int *func() {
    //利用new关键词,可以将数据开辟到堆区
    int *p = new int(10);
    return p;
}

int main() {
    //在堆区开辟数据
    int *p = func();
    //三次打印结果均为10
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
}

 

标签:栈区,int,堆区,局部变量,内存,func,new
From: https://www.cnblogs.com/eisenshu/p/18063099

相关文章

  • 8000MHz高频内存也赢不了AMD!锐龙7 7800X3D VS. i9-14900K网游与单机游戏性能对比
    一、前言:i9-14900K配8000MHz内存能否战胜锐龙77800X3D如今的Intel似乎有些魔怔,为了冲击高频而不顾一切。此前i9-14900K的满载功耗已经高达360W,而即将到来的i9-14900KS据闻峰值功耗已经超过400W,频率也来到了前所未有6.2GHz。与之形成强烈反差的是AMD的锐龙77800X3D,这款当前游戏......
  • 【C#】内存问题汇总
    一、关闭窗体内存不释放[DllImport("kernel32.dll")]privatestaticexternboolSetProcessWorkingSetSize(IntPtrprocess,intminSize,intmaxSize);//关闭窗体按钮privatevoidbtnReturn_Click(objectsender,EventArgse){this.Close();FlushMemory();......
  • 3. 寄存器(内存) | 问题 3.7 - 3.10
    问题3.7编程,将10000H  ~  1000FH做为连本带利,初始状态是空的,将AX,BX,DS中的数据入栈。#初始化SS,SPss=1000H[sp]=[0010],则[ssss:sp]=[1000H:0010H]movax,1000movss,ax#sp是指针,不是段寄存器,可以直接传数据,不用ax中转movsp,0010pushaxpushbxpu......
  • 排查 dotNET Core 程序内存暴涨的问题
    0.问题新版本上线之后,发现内存猛涨,入站流量猛增,不清楚具体原因,部分接口提示OOM异常,随后Pod直接崩溃无限重启。1.准备Pod已经接入了NewRelic和Graylog,但是仍然没有办法找到真正的罪魁祸手,此时只能进入Pod容器当中抓取内存Dump信息。我们容器的基础镜像是基于Apli......
  • 排查 dotNET Core 程序内存暴涨的问题
    0.问题新版本上线之后,发现内存猛涨,入站流量猛增,不清楚具体原因,部分接口提示OOM异常,随后Pod直接崩溃无限重启。1.准备Pod已经接入了NewRelic和Graylog,但是仍然没有办法找到真正的罪魁祸手,此时只能进入Pod容器当中抓取内存Dump信息。我们容器的基础镜像是基于Apli......
  • Advanced .Net Debugging 3:基本调试任务(对象检查:内存、值类型、引用类型、数组和异常
    一、介绍这是我的《Advanced.NetDebugging》这个系列的第四篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。由于内容太多,故原书的第三章内容我分两篇文章来写。上一篇我们了解了一些调试技巧,比如:单步调试、下断点、过程调试等,这篇文章主......
  • Docker之CPU和内存磁盘设置(八)
    前言Docker基本掌握使用方式,但是在限制其资源方面还没有接触。本篇就简单介绍一下有关CPU、内存等配置。让每个容器的资源分配更加合理,也能够避免一些容器遇到内存泄漏,CPU过载等问题影响其他容器的正常运行。一、配置文件Docker中,配置文件可以用来调整守护进程的行为,包......
  • 进程间通信-POSIX 共享内存
    POSIX共享内存POSIX共享内存是一种在Linux系统上使用的共享内存机制,它允许多个进程可以访问同一个内存区域,从而实现进程间的数据共享。共享内存是可用IPC机制中最快的,使用共享内存不必频繁拷贝数据。但也需要注意,由于共享内存段中的数据可以被多个进程同时访问,因此需要在程序......
  • memray python 内存profiler 工具简单试用
    memraypython内存profiler工具,功能还是很强大的,以下是一个简单使用参考使用安装pipinstallmemray支持的cliusage:memray[-h][-v][-V]{run,flamegraph,table,live,tree,parse,summary,stats,transform,attach,detach}... Memo......
  • 物理内存与外设寄存器
    物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。物理地址空间,一部分给物理R......