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

推荐订阅源

Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
T
Tor Project blog
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
小众软件
小众软件
G
GRAHAM CLULEY
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
人人都是产品经理
人人都是产品经理
S
Schneier on Security
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
E
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
S
Securelist
Martin Fowler
Martin Fowler
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog

博客园 - 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`。
- 如果忘记释放内存,会导致内存泄漏。
- 过度释放或未初始化的指针可能导致程序崩溃或未定义行为。