首页 > 编程语言 > 详细

C++内存管理 | 01 C++ memory primitives

时间:2020-05-31 13:46:08      阅读:47      评论:0      收藏:0      [点我收藏+]

几种内存分配的形式

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);
}

C++内存管理 | 01 C++ memory primitives

原文:https://www.cnblogs.com/tedukuri/p/12997148.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!