c与c++的内存管理

给出内存四个分区名字:栈区、堆区、全局区(俗话也叫静态变量区)、代码区(也叫代码段)(代码段又分很多种,比如常量区)

当然也会看到别的定义如:

两者都正确,记那个都选,我选择的是第一个。 

再比如还有这样的分组: 这种分组是最正确的

开始我们先做一个题:

#include<iostream>
using namespace std;
int globalVar = 1;
static int staticGlobalVar = 1;
void test()
{static int staticVar = 1;int localVar = 1;int num1[10] = { 1,2,3,4,5,6,7,8,9,10 };char char2[] = "abcd";const char* pchar3 = "abcd";int* ptr1 = (int*)malloc(sizeof(int) * 4);int* ptr2 = (int*)calloc(4,sizeof(int));int* ptr3 = (int*)realloc(ptr2,sizeof(int) * 4);free(ptr1);free(ptr3);
}
int main()
{test();return 0;
}

 答案分别是  C C C A A       A   A   A   D   A  B

  40    5     4      4或8      4       4或8     (这里4或8,是因为其为指针,指针大小在32位电脑下指针的单位大小为4字节,64位下为8字节。)

 前五个空就不在解释了,直接从第六个空开始解释

第六个空:我们在创建char2的时候,会先在常量区上开辟空间,然后存储   abcd\0   然后再进行拷贝,将字符串拷贝到char2数组内后,就完成了对char2的创建,当然char2肯定是存在栈区上的。所以选A。

第七个空:根据上面的描述再栈区上创建了char2,又因为*char2就是a,所以*char2是存储在栈上的。所以还是选A。 

第八个空:pchar3在创建时,同样先会在常量区里面开辟空间存储  abcd\0,然后我们通过一个指针指向这段空间,所以pchar里面存的就是这个常量区的地址,又因为pchar3是一个指针,指针又存在栈上,所以我们就可以推出来pchar3是存储在栈上的。所以这个空填A。

 第九个空:根据我们上面的解释,pchar3自己本身是在栈上的,但是通过*解引用后,我们找到pchar3指针指向的空间,这个指向的空间存的是abcd\0,这几个字符我们上面解释了,是存在常量区内,所以这个空填D。

 填空二那就很简单了,这里提醒一点,温习一下sizeof与strlen的区别:

sizeof是计算其被计算的真实大小。

strlen是专门用来计算字符数组与字符串数组大小的库函数,他的计算标准是以我们指定的位置为起点,以'\0'为结束标识符结束。



 你知道malloc,calloc,realloc的三者区别么?

你知道malloc的实现原理么?

推荐视频:【CTF】GLibc堆利用入门-机制介绍_哔哩哔哩_bilibili



new/delete

在c语言种我们在堆上开辟空间通常使用malloc,calloc,realloc。但在c++中是通过new出来对象。

所以就有一个笑话:你没有对象么?没有那我们就new一个出来。

这里我们先展示一下简单运用;

#include<iostream>int main()
{//动态开辟一个int类型的对象int* p1 = new int;//动态开辟一个int类型的空间并初始化为10int* p2 = new int(10);//动态申请10个int类型的空间int* p3 = new int[10];//在c语言中我们动态开辟后又free,同样在c++中也有操作符deletedelete p1;delete p2;delete []p3;//注意数组的要加[]return 0;
}

 

可见,new与c语言的malloc,calloc,realloc使用起来都差不多,

但是c++的new还有new出来自定义出来的类对象。 

#include<iostream>
using namespace std;
class A 
{
public:A(int a = 0): _a(a){cout << "A():" << this << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};
int main()
{// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构//造函数和析构函数A* a1 = new A(2);A* a2 = (A*)malloc(sizeof(A));free(a2);delete a1;return 0;
}

运行结果:

这是我们从直观观察到的差别,其实new与malloc还是又很大的差别的。

 

这一点我也不是特别懂,我就把我明确知道并且正确的说一下吧。然后提供更好的文章。

new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局 函数来释放空间。

优秀文章:

C++ 涨知识!new和delete知识总结(全面详细)_c++ new-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职升网:中级统计师是否属于中级职称?

中级统计师确实属于中级职称。 在统计专业人员的职称体系中&#xff0c;中级统计师占据了重要的位置&#xff0c;它属于中级职称范畴。这个职称体系包括初级、中级、高级和正高级四个层次&#xff0c;每个层次都对应着不同的专业技术岗位等级。初级职称只设助理级&#xff0c;…

【大数据】—FIFA世界杯探索性分析(EDA)

引言 足球&#xff0c;作为全球最受欢迎的运动之一&#xff0c;拥有庞大的粉丝群体和深远的文化影响。自1930年首届FIFA世界杯举办以来&#xff0c;这项赛事已经成为全球体育盛事&#xff0c;吸引了数十亿观众的目光。世界杯不仅是各国足球技艺的较量&#xff0c;更是国家荣誉…

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…

texStudio使用(小白)

原先使用overleaf在线编译&#xff0c;可能eps格式的图片太大导致需要充钱&#xff0c;所以考虑本地安装 安装教程参考B站视频&#xff1a;B站Latex本地编译器安装&#xff1a;TexLive TextStudio 踩到坑&#xff1a; 1. 编译器位置要选择对 因为BibTex选成了Biber导致出现无…

vb.netcad二开自学笔记1:万里长征第一步Hello CAD!

已入门的朋友请绕行&#xff01; 今天开启自学vb.net 开发autocad&#xff0c;网上相关资料太少了、太老了。花钱买课吧&#xff0c;穷&#xff01;又舍不得&#xff0c;咬牙从小白开始摸索自学吧&#xff0c;虽然注定是踏上了一条艰苦之路&#xff0c;顺便作个自学笔记备忘!积…

海外短剧CPS系统:源码部署与推广分佣全攻略

海外短剧CPS系统&#xff1a;源码部署与推广分佣全攻略 在数字化浪潮下&#xff0c;海外短剧市场日益繁荣&#xff0c;成为众多创业者和投资者的新宠。倾力打造了一款创新的海外短剧CPS分销系统&#xff0c;为广大用户提供了一个全新的赚钱模式。今天&#xff0c;我们就来深入…

Django学习第六天

启动项目命令 python manage.py runserver 取消模态框功能 js实现列表数据删除 第二种实现思路 使用jquery修改模态框标题 编辑页面拿到数据库数据显示默认数据功能实现 想要去数据库中获取数据时&#xff1a;对象/字典 三种不同的数据类型 使用Ajax传入数据实现表单编辑&…

HTML5使用<details>标签:展开/收缩信息

details 标签提供了一种替代 JavaScript 的方法&#xff0c;它主要是提供了一个展开/收缩区域。details 标签中可以使用 summary 标签从属于 details 标签&#xff0c;单击 summary 标签中的内容文字时&#xff0c;details 标签中的其他所有从属元素将会展开或收缩。语法如下&a…

S32DS S32 Design Studio for S32 Platform 3.5 软件安装离线激活

问题描述 重新下载安装 NXP s32系列芯片的集成开发环境&#xff08;IDE&#xff09; S32DS S32 Design Studio&#xff0c;当前版本 S32 Design Studio for S32 Platform 3.5&#xff0c;安装时遇到激活问题 在线激活&#xff0c;激活码哪里来&#xff1f; s32ds 不是免费的&a…

快排的非递归实现

前提 快排的递归实现&#xff0c;在深度过深时会存在栈溢出的风险&#xff0c;所以我们需要掌握快排的非递归写法 快排的实现 单趟实现 上次我们使用了hoare的快排单趟写法&#xff0c;所以这次我们使用前后指针法. 前后指针法 初始状态下&#xff0c;初始化prev为left,cu…

文件上传(本地、OSS)

什么是文件上传&#xff1a;将文件上传到服务器。 文件上传-本地存储 前端 <template> <div><!-- 上传文件需要设置表单的提交方式为post&#xff0c;并设置enctype属性、表单项的type属性设置为file --><form action"http://localhost:8080/wedu/…

Java+ Idea+ Vue产科信息管理系统源码 什么是产科信息管理系统的门诊管理?

Java Idea Vue产科信息管理系统源码 什么是产科信息管理系统的门诊管理&#xff1f; 产科信息管理系统 门诊管理是现代医疗服务的重要组成部分&#xff0c;它借助信息技术手段&#xff0c;对产科门诊的各个环节进行优化和重构&#xff0c;以提高医疗服务效率、提升患者体验、加…

SpringBoot 生产实践:没有父 starter 的打包问题

文章目录 前言一、搜索引擎二、Chat GPT三、官方文档四、小结推荐阅读 前言 今天刚准备写点文章&#xff0c;需要 SpringBoot 项目来演示效果。一时心血来潮&#xff0c;没有采用传统的方式&#xff08;即通过引入 spring-boot-starter-parent 父工程的方式&#xff09;。 &l…

代码随想录-Day48

188. 买卖股票的最佳时机 IV 给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说&#xff0c;你最多可以买 k 次&#xff0c;卖 k 次。 注意…

批量获取学校域名子

python安全开发 python安全开发 python安全开发前言一、平台edu二、使用步骤1.引入库2.功能**完整代码**完整代码 总结 前言 目的&#xff1a;想快速的搜集edu的域名 一、平台edu https://src.sjtu.edu.cn/rank/firm/0/?page2 二、使用步骤 1.引入库 代码如下&#xff08…

DHCP服务器

目录 网络传输原则&#xff1a; DHCP: DHCP作用&#xff1a; 优缺点&#xff1a; DHCP的原理&#xff1a; 用虚拟机模拟DHCP服务器​编辑​编辑 网络传输原则&#xff1a; 网络是双向的&#xff0c;网络是有方向的 解释&#xff1a;网络是双向的&#xff1a; …

DataWhaleAI分子预测夏令营 学习笔记

AI分子预测夏令营学习笔记 一、直播概览 主持人介绍 姓名&#xff1a;徐翼萌角色&#xff1a;DataWhale助教活动目的&#xff1a;分享机器学习赛事经验&#xff0c;提升参赛者在分子预测领域的能力 嘉宾介绍 姓名&#xff1a;余老师背景&#xff1a;Data成员&#xff0c;腾…

力扣1878.矩阵中最大的三个菱形和

力扣1878.矩阵中最大的三个菱形和 斜前缀和 遍历矩阵元素&#xff0c;同时求当前点左下右下两位置的前缀和枚举每个菱形中心&#xff0c;遍历边长 int sum1[101][101];int sum2[101][101];class Solution {public:vector<int> getBiggestThree(vector<vector<in…

[SAP ABAP] MM模块常用的Table

MM模块围绕的核心是对物料进行一系列的操作 MM模块包含两大功能:采购管理和库存管理 MM模块的数据分为三大类: ① 组织结构数据 ② 主数据 ③ 业务流程数据 支撑企业经营活动的数据&#xff0c;我们可以把该数据称为主数据(主数据是进行一切业务行为的基础) 企业经营活动产生…

大数据中的常见数据问题:独断脏

想象你刚刚入职一家声称正在进行"数字化转型"的大型企业,担任大数据开发工程师。在入职的第一周,你满怀热情,迫不及待地想要大展拳脚,用你的技能来推动公司的数据驱动决策。 目录 大数据中的常见数据问题1. 独 - 数据孤岛2. 断 - 数据价值链断层3. 缺 - 标准、治理…