几种内存分配的形式
MSVC下:
#include <iostream>
#include <string>
#include <set>
#include <complex>
using namespace std;
int main() {
// 1. 利用malloc free C函数, 不可重载
void* p1 = malloc(512); // 分配512字节
free(p1);
// 2. new delete C++表达式, 不可重载
auto p2 = new complex<int>; // 分配对象
delete p2;
// 3. C++函数, 可以重载
void* p3 = ::operator new(512); // 512Bytes
::operator delete(p3);
// 4. C++标准库, 可以自由搭配容器
int *p4 = allocator<int>().allocate(5, nullptr);
allocator<int>().deallocate(p4, 5);
}
MSVC中对于allocator有两种形式的重载,
第二参数可以接受一个指针.
对于GNU C, 可通过内存池进行内存分配:
#include <iostream>
#include <complex>
#include<ext/pool_allocator.h>
using namespace std;
int main() {
// 1. 利用malloc free C函数, 不可重载
void* p1 = malloc(512); // 分配512字节
free(p1);
// 2. new delete C++表达式, 不可重载
auto p2 = new complex<int>; // 分配对象
delete p2;
// 3. C++函数, 可以重载
void* p3 = ::operator new(512); // 512Bytes
::operator delete(p3);
// 4. C++标准库, 可以自由搭配容器
int *p4 = allocator<int>().allocate(5, nullptr);
allocator<int>().deallocate(p4, 5);
// 5. 内存池, gcc下可通过__poll_alloc分配
void* p5 = __gnu_cxx::__pool_alloc<int>().allocate(9); // 分配9个ints
__gnu_cxx::__pool_alloc<int>().deallocate(static_cast<int *>(p5), 9);
}
原文链接: https://www.cnblogs.com/tedukuri/p/12997148.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/351941
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!