C++ 提供了一些内存管理库函数,这些函数可以帮助程序员更有效地管理内存。以下是一些常用的 C++ 内存管理库函数:
new
和 delete
:这两个运算符用于动态内存分配和释放。new
在堆上为对象分配内存,并返回指向该对象的指针。delete
用于释放由 new
分配的内存。int* p = new int; // 分配一个整数的内存空间
*p = 42; // 给这个整数赋值
delete p; // 释放内存
new[]
和 delete[]
:这两个运算符用于分配和释放动态数组。new[]
在堆上为数组分配内存,并返回指向数组第一个元素的指针。delete[]
用于释放由 new[]
分配的内存。int* arr = new int[5]; // 分配一个包含5个整数的数组
arr[0] = 42; // 给数组的第一个元素赋值
delete[] arr; // 释放内存
malloc()
和 free()
:这两个函数是 C 语言中的内存管理函数,也可以在 C++ 中使用。malloc()
用于分配指定大小的内存块,并返回指向该内存块的指针。free()
用于释放由 malloc()
分配的内存。#include <cstdlib>
int* p = (int*) malloc(sizeof(int)); // 分配一个整数的内存空间
*p = 42; // 给这个整数赋值
free(p); // 释放内存
注意:在 C++ 中,通常建议使用 new
和 delete
(或 new[]
和 delete[]
)来管理内存,而不是使用 malloc()
和 free()
,因为它们可以自动调用对象的构造函数和析构函数。
calloc()
和 realloc()
:这两个函数也是 C 语言中的内存管理函数,可以在 C++ 中使用。calloc()
用于分配指定数量和大小的内存块,并将内存初始化为零。realloc()
用于调整之前分配的内存块的大小。#include <cstdlib>
int* arr = (int*) calloc(5, sizeof(int)); // 分配一个包含5个整数的数组,并将所有元素初始化为零
arr[0] = 42; // 给数组的第一个元素赋值
// 调整数组大小
int* new_arr = (int*) realloc(arr, 10 * sizeof(int));
if (new_arr != nullptr) {
arr = new_arr;
} else {
// 内存分配失败,处理错误
}
free(arr); // 释放内存
aligned_alloc()
:这个函数用于分配指定对齐要求的内存块。它接受两个参数:对齐边界和所需内存大小。返回一个指向分配内存的指针,如果分配失败则返回 nullptr
。#include <cstdlib>
int* p = (int*) aligned_alloc(alignof(int), sizeof(int)); // 分配一个整数的内存空间,对齐到 int 的对齐要求
if (p != nullptr) {
*p = 42; // 给这个整数赋值
free(p); // 释放内存
} else {
// 内存分配失败,处理错误
}
posix_memalign()
:这个函数用于分配指定对齐要求的内存块。它接受三个参数:一个指向指针的指针,用于存储分配内存的地址;对齐边界;以及所需内存大小。返回一个整数,表示操作是否成功。#include <cstdlib>
void* ptr = nullptr;
int result = posix_memalign(&ptr, alignof(int), sizeof(int)); // 分配一个整数的内存空间,对齐到 int 的对齐要求
if (result == 0) {
int* p = static_cast<int*>(ptr);
*p = 42; // 给这个整数赋值
free(p); // 释放内存
} else {
// 内存分配失败,处理错误
}
请注意,aligned_alloc()
和 posix_memalign()
在某些平台上可能不可用。在使用这些函数之前,请确保检查目标平台的文档。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。