首页 > 系统相关 >C++动态内存分配/malloc/new

C++动态内存分配/malloc/new

时间:2024-04-16 10:35:18浏览次数:23  
标签:malloc 存储 程序员 内存 动态内存 new 分配

0 前言

这部分确实是面试老八股了,不过我还是记录一下

1 内存分区

在C语言中,将内存分为程序代码区+数据区,其中数据区又分为静态存储区动态存储区

在C++中,分为五种:

  1. 动态存储区:
  • 栈区:存放局部变量,由编译器自动分配释放,程序员不能操作
  • 堆:由程序员使用malloc/new申请,用free/delete释放。如果程序员忘记释放,程序运行结束后,由OS进行回收
  1. 全局存储区/静态存储区:存放全局变量和静态变量
  2. 常量存储区:存放常量,比如字符字面量
  3. 程序代码区

2 栈与堆

  1. 栈空间有限,由操作系统规定大小,分配速度极快,但是程序员控制不了它的分配与释放
  2. 堆空间由程序员自由决定所分配的大小,理论上物理内存多大你就可以要多大。分配速度慢,但是灵活

3 malloc/new

  1. 在C语言中,malloc是系统提供的函数,只有一种功能,就是申请所需大小内存
  2. new和delete是一种运算符,不是函数!不是函数!
  3. new相比malloc,除了分配内存,还有其他更加复杂的功能(待完善),所以建议使用new,而不是malloc

标签:malloc,存储,程序员,内存,动态内存,new,分配
From: https://www.cnblogs.com/jye159X/p/18137571

相关文章

  • 解决编译redis报错zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file
    编译redis时报错:zmalloc.h:50:10:fatalerror:jemalloc/jemalloc.h:Nosuchfileordirectory,执行:#sudomakeMALLOC=libc1即可成功 需要先运行“makedistclean”,它设置删除所有早期的编译文件,然后运行“make”,这样就得到了redis服务器程序的新编译。执行后成功编......
  • SystemVerilog -- 2.1 Data Types ~ New Data types
    SystemVeriloglogicandbit在上一篇文章中,概述了主要数据类型。在本会话中,我们将研究4-state和2-state变量以及两种名为logic和bit的新数据类型。4-statedatatypes除了0和1之外,还可以具有未知(X)和高阻态(Z)值的类型称为4态类型。请注意,只能在过程快中驱动,例如,数据类......
  • Object.defineProperty 和new Proxy深度检测
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device......
  • Newman下载安装
    1.安装node.js安装步骤查看已安装版本node-v  2.安装Newman运行命令:npminstall-gnewman,即可完成安装操作。或者npminstall-gnewman--registry=http://registry.npm.taobao.org 检验当前Newman是否安装成功,在dos中输入命令:newman--version windows......
  • 读论文-新闻推荐系统:近期进展、挑战与机遇的评述(News recommender system_ a review
    前言今天读的论文为一篇于2022年发表在"人工智能评论"(ArtificialIntelligenceReview)的论文,文章主要强调了NRS面临的主要挑战,并从现有技术中确定了可能的解决方案。引用这篇论文:[1]Raza,Shaina,andChenDing."Newsrecommendersystem:areviewofrecentprogress,c......
  • 内存管理new and delete(C++)
        在本篇中,将会较为详细的介绍在Cpp中的两个新操作符new和delete,将会介绍其中的底层原理,以及这两个操作符的使用方法。其中还介绍了new/delete操作符使用的细节,还扩展了一些有关定位new表达式的知识点。最后总结了malloc/free与new/delete的区别。目......
  • new mars3d.graphic.PolylineEntity({实现航线真实穿过山体或者模型的部分用虚线展示
    1.在官网示例中通过 newmars3d.graphic.PolylineEntity({实现航线真实穿过山体或者模型的部分用虚线展示效果2.示例地址:功能示例(Vue版)|Mars3D三维可视化平台|火星科技3.实现效果: 1.航线真实穿过山体或者模型的部分用虚线展示、并且是(真实穿过不是视线挡住那种),遮挡......
  • 解决 "last line of file ends without a newline" 警告的方法:使用 .editorconfig
    在软件开发过程中,我们经常会遇到一些常见的代码规范问题,其中之一就是"lastlineoffileendswithoutanewline"警告。这个警告表示文件的最后一行缺少换行符,可能会导致一些编辑器或版本控制系统的问题。如果每次都手动去操作添加一行有点麻烦,我们可以通过使用.editorconfig......
  • newstart 部分题解和pwn相关的学习
    做newstart的pwnpieee题的pie的学习首先:对于pieee这道题很简单的栈溢出,除了NX其他的保护都开了,然后呢在左边也发现了后门函数相对偏移为0x1264(对于这里我们只用关心后三位,因为pie不会随机化地址的低12位,通俗点说就是我们十六进制地址的后三位)而一般而言后三位的地址能够确定我......
  • C语言进阶之动态内存管理【概念篇】
    前言:我们知道C语言是一门接触底层的语言,其核心用法之一就是对内存的操作,本篇将就详细介绍C语言中是如何灵活开辟内存空间的以及如何管理使用这些空间等等。一.为什么要引入动态内存管理 ? 在C语言中我们目前已经掌握两种开辟内存空间的方式:1.intdata=10;//在栈(stack)空......