C++ 98/03 应该学习哪些知识6

C++版本发展简史:新特性介绍 阅读详情

内存中的栈和堆分配

在C++中,栈和堆都是内存分配的方式。栈是自动分配的,堆是手动分配的。栈存储的是局部变量和函数调用的上下文,而堆存储的是动态分配的内存。下面是更详细的解释和示例:

  1. 栈分配

栈是一种后进先出(LIFO)的数据结构,它的内存分配和释放是自动完成的。当程序执行一个函数时,函数的参数、局部变量和函数返回地址都被压入栈中。当函数执行完毕时,这些变量和地址都会被自动从栈中弹出。栈的分配速度很快,但它的空间比较有限,通常只有几兆字节。栈上的数据只能在当前作用域中访问,一旦离开作用域,数据就会被销毁。

示例:

void foo()
{
  int x = 1; // x被分配在栈上
  int y = 2; // y被分配在栈上
  int z = x + y; // z被分配在栈上
  // x、y、z在函数执行完毕时会被自动销毁
}

2.堆分配

堆是一种动态分配内存的方式,程序员可以手动分配和释放堆上的内存。堆上的数据可以在整个程序执行期间访问,不受作用域的限制。堆上的分配速度比栈慢,但它的空间很大,通常可以分配几百兆字节的内存。堆上的数据需要手动释放,否则会导致内存泄漏。

示例:

int* p = new int; // 分配一个int类型的内存块
*p = 10; // 将10赋值给这个内存块
delete p; // 释放这个内存块

在上面的示例中,我们使用new运算符手动分配了一个int类型的内存块,并将10赋值给它。在使用完这个内存块后,我们使用delete运算符手动释放了它。注意,delete运算符只能用于通过new运算符分配的内存块,不能用于栈上的变量。

下面是一个更复杂的示例,它演示了栈和堆的区别:

#include <iostream>
using namespace std;

int* createArray(int size) // 返回一个指向int数组的指针
{
  int* arr = new int[size]; // 分配一个int数组的内存块
  for (int i = 0; i < size; i++) {
    arr[i] = i + 1; // 将数组初始化为1~size
  }
  return arr; // 返回指向数组的指针
}

int main()
{
  // 在栈上分配一个数组
  int arr[5] = { 1, 2, 3, 4, 5 };
  
  // 在堆上分配一个数组
  int* arr2 = createArray(5);

  // 输出栈上的数组
  cout << "Stack array: ";
  for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;

  // 输出堆上的数组
  cout << "Heap array: ";
  for (int i = 0; i < 5; i++) {
    cout << arr2[i] << " ";
  }
  cout << endl;

  // 释放堆上的数组
  delete[] arr2;

  return 0;
}

在上面的示例中,我们定义了两个数组:一个是在栈上分配的,另一个是在堆上分配的。栈上的数组只能存储静态大小的数据,而堆上的数组可以动态分配大小。在示例中,我们使用createArray函数在堆上分配了一个大小为5的int数组,并将它初始化为1~5。在main函数中,我们分别输出了栈上的数组和堆上的数组,并使用delete运算符释放了堆上的数组。

总之,栈和堆是C++中常用的内存分配方式。栈上的数据自动分配和销毁,速度快但空间有限;堆上的数据手动分配和销毁,速度慢但空间大。在实际编程中,我们需要根据需要选择合适的内存分配方式,避免出现内存泄漏和其他问题。

深入解析C++的演进:C++98到C++17 C++作为一门历史悠久的编程语言,其标准的演进是多年来编程实践不断进步和技术创新的集中体现。从最初于1983年被命名以来,C++经历了数个标准的迭代更新,每一个版本都为语言的表达能力、性能、安全性和易用性带来了重大改进。本章将概述C++从其诞生到现在主要标准的演进脉络,为读者揭示这一编程语言不断自我完善和发展的历程。首先,C++语言在1985年被Bjarne Stroustrup设计出来,并在1989年首次以“C with Classes”发布。随后,在1998年正式成为ISO标准,即C++98。 阅读详情

相关推荐

C++98/C++03/C++11/C++14/C++17/C++20 标准帮助文档 2020-09-04

C++98/C++03/C++11/C++14/C++17/C++20 标准帮助文档,更新于 2020 年 9 月 4 日。docsets 格式,可使用 zeal 软件查看

C++03 标准详解:C++98的技术修订版

C++03是C++98的技术修订版本,主要修正语言缺陷而非引入新特性。该标准澄清了容器成员函数的异常安全性、流状态处理、模板规则和初始化语法等100多处问题,增强了标准库规范,改善了与C99的兼容性,并统一了类型定义和名称查找规则。虽然变化细微,但C++03提高了语言的稳定性和可移植性,为后续C++11的重大更新奠定了基础。关键改进包括模板特化规则、值初始化语法和标准库头文件补充等。

C++发展史系列已完结,这段时间将会迎来系列作品——C++STL系列,敬请期待。作者邮箱:ljq20110324@outlook.com 684

Unity 第一人称视角控制移动、旋转

第一人称视角操作此功能主要是借鉴YouTube,写的蛮好我就搬运过来让大家也试试。

qq_36515472的博客 4202

C++ 98/03 应该学习哪些知识16

RAII 与 pimpl 惯用法

clayhell的博客 1157

(OpenCV)图像目标尺寸检测

  本文翻译自pyimagesearch技术博客上的一篇文章,《Measuring size of objects in an image with OpenCV》,原文作者:Adrian Rosebrock 。 https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv...

明柳梦少的博客 7万+

hMailServer安装配置

hMailServer安装配置 使用宝塔面板上的宝塔邮件服务器2.1版本,进行安装hMailServer。 宝塔在安装hMailServer是有做了一些配置,如果是手工安装需要注意一下配置点: 1、\hMailServer\Bin 目录下增加mysql连接文件libmysql.dll,要去下载32位的。 libmysql.dll下载 链接:https://pan.baidu.com/s/1YGJXzjowlJ9n_MiqB4xiqw 提取码:wz90 2、 需要提前安装mysql,并创建hM.

王者的博客 5868

C++ 98/03 应该学习哪些知识14

重载、重写和覆盖

clayhell的博客 1357

Gartner《构建可扩展数据产品建设框架》心得

数据产品化:从概念到落地的实践指南 当前企业正从传统数据需求模式转向数据产品化新范式。本文系统阐述了数据产品的核心价值、定义分类和实施框架,指出成功关键是将数据包装为可复用、可扩展的产品。Gartner框架强调产品思维,提出4阶段12步实施路径,涵盖设计、工程、发布和监控全流程。文章特别提醒要避免7大常见误区,如简单重命名报表、忽视元数据治理等,建议采取MVP策略,90天内完成从价值验证到产品落地的闭环。实施中需平衡技术选型与业务需求,建立跨职能团队,并通过AARRR模型持续追踪产品价值。

2501_91410404的博客 1006

C++ 98/03 应该学习哪些知识17

内存溢出和内存泄漏

clayhell的博客 1204

SAP ABAP BAPI_PRODORD_CHANGE:动态刷新PP主数据的实战解析

本文深入解析了在SAP ABAP开发中,如何利用BAPI_PRODORD_CHANGE函数实现生产订单PP主数据的动态刷新。针对CO02事务码无法满足的后台自动化场景,详细讲解了通过设置explosion_date和explode_new等关键参数来强制重新读取BOM和工艺路线的实战方法,并提供了核心代码示例与避坑指南,确保生产订单信息与最新主数据同步。

weixin_29231027的博客 149

RPA机器人技术原理初探

RPA初步

曲折旅程,艰难人生 2139

C++98/03版本知识点汇总

1.类只在代码中出现,不会在运行的程序中出现,即编译时出现;对象在运行的程序中出现,并占用内存,是运行的实体; 2.消息传递的实质是方法的调用; 3.面向对象最突出的特征是:封装性、继承性、多态性 封装:将数据结构和作用在数据结构上的操作组成一个实体,单位是对象,提供动态代码共享; 继承性:提供静态的代码共享; 多态性:不同的对象收到相同的消息产生多种不同的行为方式 编译时的多态性:通

忘世麒麟的专栏 3220

损失函数大汇总(四十五)(clDice Loss附公式推导与代码)

clDice Loss是一种针对细长结构分割任务的拓扑保持损失函数,通过比较预测区域和真实区域的中心线重叠情况来评估分割质量。与传统Dice Loss关注区域重叠不同,clDice Loss重点考察连通性和骨架拓扑结构,能有效避免血管断裂、分支错误连接等问题。该损失函数包含两个核心指标:预测骨架在真实区域中的覆盖比例(Topology Precision)和真实骨架被预测区域覆盖的比例(Topology Sensitivity),通过调和平均得到最终评估值。由于传统骨架提取算法不可导,实际实现采用可微的so

悦学共鸣,温柔以待,汇聚光芒,共同成长 451

C++ 98/03 应该学习哪些知识13

new/delete和malloc/free

clayhell的博客 1177

三维点云转深度图

点云投影过程是将三维点云数据转化为二维图像坐标的关键步骤,它的实现涉及到相机内外参数的计算,包括相机的内部参数(如焦距和主点)和外部参数(如相机位置和方向)。具体来说,可以通过将每个点的三维坐标转换为相机坐标系下的坐标,然后使用相机内部参数和外部参数来计算在二维图像中的坐标。接着计算每个点的深度值,将深度值映射到像素值上,最后创建深度图像并将深度值赋给对应的像素值。这里需要注意的是,在将深度值映射到像素值上时,需要将像素值转换为 uchar 类型,否则在将深度值赋给像素值时会出现类型不匹配的错误。

点云兔子的博客 3172

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++ 98/03 应该学习哪些知识19

迭代器、空间配置器理解

clayhell的博客 1468

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++11:基于C++98的语法更新

介绍了c++11中的一些变化以及新的语法。详细阐述了其实现方式和使用场景。

2201_75880188的博客 1206

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++ 的史诗级进化:从C++98到C++20

C++ 的史诗级进化:从C++98 - C++20 详解,含示例

不休的博客 1541

C++ 98/03 应该学习哪些知识15

类型转换方式

clayhell的博客 1078

C++11学习

C++11学习本章目的:当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,Google连ART虚拟机的实现代码都切换到了C++11。C+11的标准规范于2011年2月正式落稿,而此前10余年间,C++正式标准一直是C++98/03[①]。相比C++98/03,C++11有了非常多的变化,甚至一度让笔者大呼不认识C++了[②]。不过,作为科技行业的从业者

Innost的专栏 3万+

C++ 98/03 应该学习哪些知识7

C++ 面向对象语法

clayhell的博客 950

C++ 98/03 应该学习哪些知识9

构造函数/析构函数/拷贝构造

clayhell的博客 1000

C++ 98/03 应该学习哪些知识18

STL标准模板库

clayhell的博客 1221

C++ 98/03 应该学习哪些知识5

C和C++区别

clayhell的博客 1110

C++ 98/03 应该学习哪些知识?

C++ 98/03 应该学习哪些知识?

clayhell的博客 1055

【C++学习】C++入门知识(上)

介绍了C++在C基础上扩展出来的一些基本语法,包括命名空间,缺省参数,函数重载等内容。

weixin_63726869的博客 4728
上一篇: C++ 98/03 应该学习哪些知识5
下一篇: C++ 98/03 应该学习哪些知识7
五百五。
博客等级 码龄7年 249粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值