惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - Augustone

积分公式 100 条(大学数学系常用) 龙虾警告 安装sparktts Kali上安装Cuda和cudnn 再次安装docker单机版ufm-南京 概率论与数理统计 Transformer,大模型的幻觉太严重,仅作参考吧 词向量为什么包含外部特征? 哈希256,待研究 梯度下降法权重更新的特点 Python库的位置 删除_JAVA_OPTIONS 支持cuda的pytorch NVIDIA CUDA 编程模型之Grid和Block CUDA程序可以运行,但出现“标识符不能识别”时可 CUDA函数的概念、种类和示例 CUDA的核函数与CNN的核函数 CUDA核函数 cuda的c++程序 如何检查nvidia驱动、cuda、cudnn是否安装了
C语言内存管理,分配、使用、释放以及安全性
Augustone · 2024-08-15 · via 博客园 - Augustone

在C++中,内存分配是通过几种不同的方式来管理的。这包括自动存储、静态存储和动态存储。下面分别解释这些存储类别以及如何使用它们进行内存分配。

#1,自动存储(Automatic Storage)

这是最常用的存储类型,当一个变量在函数内被声明时,它会自动获得存储空间,并且在函数结束时自动释放。例如:

void example() {
int x = 5; // x 是自动存储
}


#2,静态存储(Static Storage)


静态存储的变量在整个程序运行期间都存在,即使在函数调用之间也保留其值。可以在全局作用域或函数内部声明静态变量。

void example() {
static int x = 5; // x 在整个程序运行期间存在
}


#3,动态存储(Dynamic Storage)

动态存储用于在程序运行时按需分配和释放内存。这通常通过`new`和`delete`操作符完成。

##31,使用 `new` 分配内存
`new`操作符用于在堆上分配内存。它返回一个指向所分配内存的指针。

int* ptr = new int(5); // 分配一个int大小的内存,并初始化为5


如果需要分配数组,可以使用:

int* arr = new int[10]; // 分配10个int大小的内存


##32使用 `delete` 释放内存
`delete`操作符用于释放通过`new`分配的内存。对于单个对象和数组,语法不同。

delete ptr; // 释放单个对象

delete[] arr; // 释放数组


#33,C 风格动态内存管理
虽然不推荐,但C++也支持C风格的内存管理,使用`malloc`和`free`函数,不过它们不是类型安全的。

#include <cstdlib>

int* ptr = (int*)malloc(sizeof(int)); // 分配内存
*ptr = 5; // 使用内存
free(ptr); // 释放内存


#内存管理注意事项
- 必须确保每个`new`都有对应的`delete`。
- 如果忘记释放内存,会导致内存泄漏。
- 过度释放或未初始化的指针可能导致程序崩溃或未定义行为。