分配层次

C++ memory primitives

分配 释放 类型 是否可重载
malloc free() C函数 不可
new delete C++表达式 不可
::operator new() ::operator delete() C++函数
allocator::allocate() allocator::deallocate() C++标准库 可自由设计并以之搭配任何容器

分配与释放的四个用法

1、malloc and delete

void* p1 = malloc(512);     //512bytes
free(p1);

2、new and delete

complex<int>* p2 = new complex<int>;    //one object
delete p2;

**3、::operator new() and ::operator delete() **

void* p3 = ::operator new(512);     //512bytes,是个全局函数
::operator delete(p3);

4、allocator::allocate() and allocator::deallocate()
allocator就是分配器的名称,用的时候要告诉它用的每个单元是什么,例如这里我们给它int,这样就形成了一个type(类型).
类型名称(typename)后面加上小括号(),就形成了一个临时对象(建立的对象没有名称,生命周期只在使用的这一行)
注意GNUC,后面两种是GNUC4.9版以后的写法。向标准规范对齐了。

//以下使用C++标准库提供的allocators *
//其接口具有标准规格,但是收到编译器的影响,会有所不同。
#ifdef _MSC_VER//以下函数都是non-static,要通过object调用,以下分配3个ints.int* p4 = allocator<int>().allocate(3,(int*)10);allocator<int>().deallocate(p4,3);
#endif
#ifdef  _BORLANDC_//以下函数都是non-static,要通过object调用,以下分配3个ints.int* p4 = allocator<int>().allocate(5);allocator<int>().deallocate(p4,5);
#endif
#ifdef _GNUC_//以下函数都是static,void* p4 = alloc::allocate(512);alloc::deallocate(p4,512);//以下兩函數都是 non-static,定要通過 object 調用。以下分配 7 個 ints.    void* p4 = allocator<int>().allocate(7); allocator<int>().deallocate((int*)p4,7);     //以下兩函數都是 non-static,定要通過 object 調用。以下分配 9 個 ints.    void* p5 = __gnu_cxx::__pool_alloc<int>().allocate(9); __gnu_cxx::__pool_alloc<int>().deallocate((int*)p5,9);
#endif

参考:

https://www.bilibili.com/video/BV1Kb411B7N8?p=3

C++ 内存分配层次以及memory primitives的基本用法相关推荐

  1. C++ 高级数据类型(四)—— 动态内存分配

    到目前为止,我们的程序中我们只用了声明变量.数组和其他对象(objects)所必需的内存空间,这些内存空间的大小都在程序执行之前就已经确定了.但如果我们需要内存大小为一个变量,其数值只有在程序运行时 ...

  2. 操作系统 非连续分配_操作系统中的连续和非连续内存分配

    操作系统 非连续分配 In this article, we will learn about the different types of memory management techniques ...

  3. dynamic_memory_allocation(动态内存分配)

    文章目录 在开始之前,我们需要回顾一下 我们当前所掌握的 内存使用方法 当前我们知道的内存使用方法 1. 创建一个 变量 2. 创建 一个数组 特点: 下面正式进入正文: 为什么存在动态内存分配? 动 ...

  4. 内存分配策略(二):JMM,Java Memory Model

    Java内存模型简述 为了屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,Java虚拟机规范中定义了Java内存模型. Java内存模型是一种规范,它规 ...

  5. Advanced Memory Allocation 内存分配进阶

    Advanced Memory Allocation 内存分配进阶 URL: http://blog.csdn.net/amwihihc/article/details/7481656 May 01, ...

  6. mapreduce on yarn简单内存分配解释

    https://www.cnblogs.com/yesecangqiong/p/6274427.html 关于mapreduce程序运行在yarn上时内存的分配一直是一个让我蒙圈的事情,单独查任何一个 ...

  7. java map 内存分配_mapreduce 内存分配

    稍微有点mapreduce使用经验的同学肯定对OOM不陌生,对的,我目前在mapReduce里面遇到的最多的报错也是内存分配出错,所以看到好多hadoop执行脚本里面有好多关于内存的参数,虽然是知道和 ...

  8. Windows下动态内存分配方式http://whx.tzgt.gov.cn/newOperate/html/7/71/711/3938.html

    这里的"动态内存"包含以下两个方面的内容:   1.内存.这里的"内存"指的是进程的虚拟内存空间.在Win32环境下,每一个进程拥有独立的,大小为4G(0x00 ...

  9. C++中运行一个程序的内存分配情况及qt中的内存管理机制

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...

最新文章

  1. python 进程理论基础
  2. 数学中各种矩阵收集(转至其他博主)
  3. 在Android初次的前期学习中的二个小例子(2)
  4. Linux C 存储映射IO
  5. Oracle 19c和20c新特性最全解密
  6. android:contentDescription 的用途
  7. delete kubectl pod_使用kubectl管理k8s集群(三十)
  8. android对象关系映射框架ormlite学习之单表操作
  9. Three Tips
  10. 程序员在网吧办公是什么感觉?网友:在被打的边缘疯狂试探!
  11. xpath 查询忽略大小
  12. java semaphore 原理_Java并发编程原理与实战二十八:信号量Semaphore
  13. 计算机网络与通信pdf谢希仁_考情分析|2020年同济大学计算机考研考情分析
  14. Adams安装出错的一种情况
  15. mybatis mapper xml的学习详解
  16. 黑苹果(Hackintosh)驱动Intel HD 4600
  17. 用计算机怎样搜wifi网,笔记本电脑搜索不到无线网络(Wifi)怎么办
  18. 一步一步搭建客服系统
  19. UE4引擎源码学习笔记(一):源码整体文件结构
  20. 角频率、圆周频率、归一化频率的区别

热门文章

  1. NodeJS学习笔记—1.CommonJS规范
  2. 1.2鼠标移入移出改变背景色和其他大小样式
  3. vue2.0移除或更改的一些东西
  4. 数据可视化的基本原理——视觉通道
  5. H5_ 多媒体video,autio使用示例
  6. Emacs中的Color Theme以及字体设置
  7. 项目开发中发布更新文档备注
  8. 解决问题SyntaxError: Unexpected token import
  9. 设置UITableView设置contentsize
  10. Android_项目文件结构目录分析