在Linux下,C++程序的内存管理主要涉及到堆和栈的使用。以下是一些关键点:
new
和delete
(或malloc
和free
)进行分配和释放。new
和 delete
:int* ptr = new int; // 分配一个int大小的内存
delete ptr; // 释放内存
malloc
和 free
:int* ptr = (int*)malloc(sizeof(int)); // 分配一个int大小的内存
free(ptr); // 释放内存
为了减少内存泄漏的风险,C++11引入了智能指针,如std::unique_ptr
、std::shared_ptr
和std::weak_ptr
。
std::unique_ptr
:独占所有权,不能被复制,只能移动。std::unique_ptr<int> ptr(new int(42));
std::shared_ptr
:共享所有权,可以被多个指针共享,引用计数管理内存。std::shared_ptr<int> ptr1 = std::make_shared<int>(42);
std::shared_ptr<int> ptr2 = ptr1; // 共享所有权
std::weak_ptr
:配合std::shared_ptr
使用,避免循环引用。std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);
std::weak_ptr<int> weakPtr = sharedPtr;
valgrind --leak-check=full ./your_program
g++ -fsanitize=address -o your_program your_program.cpp
./your_program
posix_memalign
或C++17的std::aligned_alloc
进行对齐分配。void* ptr;
posix_memalign(&ptr, 32, 1024); // 分配1024字节,对齐到32字节边界
free(ptr);
int fd = open("file.txt", O_RDONLY);
void* addr = mmap(NULL, sizeof(file_contents), PROT_READ, MAP_PRIVATE, fd, 0);
// 使用addr进行读写操作
munmap(addr, sizeof(file_contents));
close(fd);
通过合理使用这些内存管理方法,可以有效地提高C++程序在Linux下的性能和稳定性。