C/C++的内存分布、动态内存管理等的介绍

news2024/11/22 20:51:25

文章目录

  • 前言
  • 一、C/C++的内存分布
  • 二、C/C++动态内存管理
  • 总结


前言

C/C++的内存分布、动态内存管理等的介绍


一、C/C++的内存分布

因为程序在运行过程中需要存储一些不同的数据,所以需要对内存空间进行分类

在这里插入图片描述

二、C/C++动态内存管理

C语言动态内存管理是malloc / calloc / realloc / free等来实现的

C++通过new和delete操作符进行动态内存管理。new和delete是新的关键词

#include <iostream>
using namespace std;


int main()
{

	// 动态申请 1 个int类型的空间
	// C
	int* p1 = (int*)malloc(sizeof(int));
	free(p1);

	// CPP
	int* p2 = new int;
	delete p2;


	// 动态申请 10 个int类型的空间
	// C
	int* p3 = (int*)malloc(sizeof(int) * 10);
	free(p3);

	// CPP
	int* p4 = new int[10];
	delete[] p4;

	
	// CPP 动态申请 1 个int类型的空间并初始化为 10
	int* p5 = new int(10);
	delete p5;

	// CPP 对动态申请的数组进行初始化
	int* p6 = new int[10] {1, 2, 3};
	delete[] p6;

	return 0;
}
  • C/C++动态申请空间默认都不会进行初始化
  • C++可以采用 new int(10)对空间进行任意的初始化
  • C++对数组进行初始化时,采用new int[10] {1, 2, 3}; 的形式,未指定空间默认初始化为0。

对于内置类型,C/C++的动态内存管理没有很大的区别,它们的区别主要在于自定义类型。
对于自定义类型,C语言的malloc很纯粹,不会进行初始化,需要调用函数。
C++可以在动态申请空间的同时,通过调用自定义类型的构造函数来进行初始化。

#include <iostream>
using namespace std;

struct ListNode
{
	int _val;
	struct ListNode* _next;

	ListNode(int x)
		: _val(x)
		, _next(NULL)
	{

	}
};


ListNode* BuyNewNode(int x)
{
	struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
	if (newNode == NULL)
	{
		return NULL;
	}

	newNode->_val = x;
	newNode->_next = NULL;

	return newNode;
}


int main()
{
	// C语言创建链表节点
	struct ListNode* n1 = BuyNewNode(1);
	struct ListNode* n2 = BuyNewNode(2);
	struct ListNode* n3 = BuyNewNode(3);


	// CPP创建链表节点
	ListNode* nn1 = new ListNode(1);
	ListNode* nn2 = new ListNode(2);
	ListNode* nn3 = new ListNode(3);

	return 0;

}

总结

C/C++的内存分布、动态内存管理等的介绍

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

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

相关文章

光降解水凝胶:三色光响应

大家好&#xff0c;今天来了解一种三色可见光波长选择性光降解水凝胶生物材料——《Tricolor visible wavelength-selective photodegradable hydrogel biomaterials》发表于《Nature Communications》&#xff0c;其交联剂Rubiq、Rubp和oNB对低能可见光&#xff08;400 - 617n…

洛科威岩棉板重塑屋面应用,以多重优势成为“优选材料”

屋面作为建筑物的“外衣”&#xff0c;不仅承载着遮风挡雨的基本功能&#xff0c;更在保温隔热、防火安全、防潮隔音等方面发挥着举足轻重的作用。然而&#xff0c;面对极端气候、自然灾害以及日益严苛的环保标准&#xff0c;传统屋面材料逐渐暴露出其局限性&#xff0c;保温效…

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例&#xff0c;垃圾收集器在对堆内存进行回收前&#xff0c;第一件事情就是要确定这些对象中哪些还存活&#xff0c;哪些已经死去&#xff08;即不可能再被任何途径使用的对象&#xff09;。也就是判定垃圾。…

STM32 使用8720 通过LWIP发送数据

一、硬件IOC 1、GPIO 2、NVIC 3、SYS 4、RCC 5、ETH 6、USART 7、LWIP 二、软件函数 1、Main /* USER CODE BEGIN Includes */ #include "ytcesys.h" /* USER CODE END Includes *//* USER CODE BEGIN 2 */ ethreset(); MX_LWIP_Init(); OPEN_USART1…

chunqiude

CVE-2022-28512 靶标介绍&#xff1a; Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客&#xff0c;它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能&#xff0c;您无需接触任何代码即可启动并运…

【Java开发】Maven安装配置详细教程

原创文章&#xff0c;不得转载。 文章目录 产生背景用途安装配置本地仓库配置镜像 产生背景 在Java应用程序开发中&#xff0c;随着项目规模的不断扩大和复杂性增加&#xff0c;项目依赖的库、插件和配置文件也变得愈加复杂。传统的项目构建工具&#xff08;如Ant&#xff09;…

简单选择排序例题

从上面题目看出&#xff0c;如果排序方法可保证在排序前后排序码相同的相对位置不变&#xff0c;也就是四个选项里&#xff0c;21和21*之间不会交换 简单选择排序方法是&#xff1a;首先在所有记录中找到排序吗最小的记录&#xff0c;把它与第一个记录交换&#xff0c;然后在其…

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor EXO:step MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor 这段代码定…

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们&#xff0c;今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例&#xff01;如果你对机器学习感兴趣&#xff0c;或是正寻找如何用AI技术解决实际问题的方法&#xff0c;这篇分享绝对不容错过&#xff01;&#x1f469;‍&#x1f4…

Pyqt5高级技巧2:Tab顺序、伙伴快捷键、各类常用控件的事件、可移动的卡片式布局(含基础Demo)

目录 一、编辑Tab顺序 二、编辑伙伴 三、设置快捷键&#xff08;仅MainWindow可用&#xff09; 四、信号槽 【基本介绍】 【常用信号槽】控件对窗体&#xff08;拖地&#xff09; 【常用信号槽】控件对控件 【自定义信号槽】步骤 五、设计文件的转化 六、GUI的运行 1…

【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析

文章目录 前言 背景介绍 充电协议框架 充电握手阶段 充电准备阶段 充电传输阶段 充电结束阶段 错误处理阶段 总结 参考资料 前言 近期在一个嵌入式开发项目中&#xff0c;用到了新能源充电协议&#xff0c;期间在翻阅各种资料文件时&#xff0c;一些地方还是容易理解…

包装和类练习 Stack的使用

目录 1.最小栈 2.有效的括号 3.栈的压入、弹出序列 4.逆波兰表达式求值 5.链栈与顺序栈相比&#xff0c;比较明显的优点是&#xff08; &#xff09; 1.最小栈 2.有效的括号 class Solution {public boolean isValid(String s) {Stack<Character> st new Stack<&g…

I/O方式

目录 一、程序查询方式 1.程序查询方式的特点 2.程序查询方式可分类 ①独占查询 ②定时查询 二、中断方式 1.中断I/O流程 2.例题 三、DMA方式 1.DMA控制器 2.特点 3. DMA的传送方式 ①停止CPU ②周期挪用 ③DMA和CPU交替访存 4.传送流程 ①预处理 ②数据传…

AIGC时代算法工程师的面试秘籍(第二十一式2024.8.19-9.1) |【三年面试五年模拟】

写在前面 【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试经验&#xff0c;力求让读者在获得心仪offer的同时&#xff0c;增强技术基本面。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky…

海外云服务器安装 JDK8 (Ubuntu 18.04 记录篇)

本文首发于 秋码记录 曾几何时&#xff0c;我可是国内云厂商的忠实用户啊。 而今&#xff0c;却不再为云服务器&#xff08;尤指国内云厂商&#xff09;续费了&#xff0c;作为我的个人网站 秋码记录 选择了托管在 gitlab.com Pages服务上。 国内云厂商对新老用户持有两种截…

Linux网络编程入门及OSI七层模型

目录 OSI七层模型 TCP/IP五层(或四层)模型 ​编辑 协议报头 局域网 以太网 令牌环网 无线LAN OSI七层模型 TCP/IP五层(或四层)模型 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现…

全能型AI与专业型AI:未来的选择与挑战

引言 随着人工智能技术的飞速发展&#xff0c;市场上出现了多种类型的AI产品&#xff0c;其中全能型AI与专业型AI是两大主要类别。近期&#xff0c;OpenAI预计推出的代号为“草莓”的新AI引起了广泛关注&#xff0c;这一全能型AI的推出引发了关于未来AI趋势的热烈讨论。在这个…

学会自定义LayoutManager

最开始我在学习自定义LayoutManager的时候&#xff0c;也是网上搜文章&#xff0c;看博客&#xff0c;以及一些公众号的推文。刚开始看的时候觉得还是那么回事&#xff0c;但是在慢慢的深入LayoutManager源码才发现很多的文章其实都是不合格&#xff0c;乃至可以说是很误导人的…

vue3+elementplus的表格展示和分页实战

文章目录 一、Element Plus的安装使用二、el-table 表格组件三、el-pagination 分页组件四、全部代码五、效果 Element Plus 是一个基于 Vue 3 的现代化 UI 组件库&#xff0c;旨在帮助开发者快速构建美观且功能丰富的 Web 应用程序。它提供了大量的 UI 组件&#xff0c;如按钮…

leetcode3 无重复字符的最长子串

思路 双指针 易错点 什么时候更新长度 除了每次有重复的要更新 &#xff0c;如果abc这种&#xff0c;本身就不会重复&#xff0c;那maxLength就永远不会更新了。 思路不对 left不应该是1&#xff0c;对于abca&#xff0c;是1 对于 abcc,应该直接加3&#xff0c;所以需要记…