C++内存管理|05 各平台下std::allocator概览

1. VC6中的std::allocator VC6中的std::allocator源码实现如下图: 从图中可以发现,VC6中的std::allocator并没有进行memory pool这类的处理,直接在里面调用operator new(),进而调用::operator new,然后mall……

阅读全文

C++内存管理|04 内存池

1. per-class allocator (ver 1.0) 前面几篇内存管理介绍了在C++中进行内存管理的接口,有了这些接口就可以开始使用这些工具管理内存。首先来看一个来自<<C++ Primer>> 3ed, p765的一个例子: #include <cstddef> #include <iostream> using namespace std; class Screen { public: Screen(int x) :i(x) {}; int geti() { return i; }; void* operator new(size_t size) { Screen *p; if (!freeStore) { size_t chunk = screenChunk * size; freeStore = p = reinterpret_cast<Screen*>(new char[chunk]); for (; p != &freeStore[screenChunk - 1]; ++p) { p->next = p +……

阅读全文

C++内存管理|03 重载

前面两篇【C++内存管理】从整体上来看了系统中四个调用层面上的内存分配和释放,然后详细的介绍了这四个层面中的操作符/函数的使用以及背后的调用关系。在这一篇我们就从内存管理实现的基本点重载开始,看看C++给我们提供了哪些可供用户使用的内存管理接口。 应用程序的设计中,我们所说的内存管……

阅读全文

C++内存管理|02 内存操作相关函数

上一篇中从整体上来看系统中四个层面上内存的分配和释放,这样我们就对内存分配有了一个整体的认识。这一节则详细的来写写这四个层面中的操作符或函数的使用方法,以及他们背后的调用关系。首先我们从我们使用最多的new和delete来说起。 1. new 和 delete new 操作符有时候也有地方称他为new opera……

阅读全文

C++内存管理|01 分配和释放的四个层面

内存的使用是稍底层一些的程序,或者性能要求严格的程序都是非常有讲究的一块。从程序的分层设计的角度来看,一般有四个层面上内存的分配和释放可以共给我们开发人员使用。本篇就介绍这这个层面上内存分配相关的一些函数接口。 1. 站在高处思考 从一个比较高的角度来看,内存管理说到底就是使用OS提供的……

阅读全文

WDDM时序调用流程图

首先从WDDM驱动的框架图中来看看Driver是需要做什么事情的。下图中的带有灰色背景的就是GPU厂商提供的Driver需要实现的内容。 以一个简单的例子来看他们具体是怎么工作的: 1. Rendering Device 的创建 1、APPlication申请创建渲染设备时,display minport driver会接收到Dxgk……

阅读全文

一个电子发烧友的程序员成长之路

这是参与CSDN博客征文大赛的文章,征文主题是“入坑”的那些事。有幸这个文章获得了征文大赛的二等奖。以下是文章的原文. 回想起高考已经是7年前的事情了,一直想在毕业之际记忆记录一下7年的历程,懒惰始终占据着我的整个身躯。看到这个征文活动,让我有点想提笔记录的冲动了。 1.邂逅 一直在想……

阅读全文

设计模式

OOP的目标 理解松耦合的设计思想 掌握面向对象的设计原则(设计原则比模式更为重要) 掌握重构的技法,改善设计 掌握GOF核心设计模式 向下:深入理解三大面向对象机制 • 封装,隐藏内部实现 • 继承,复用现有代码 • 多态,改写对象行为 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制……

阅读全文

排序算法

1. 选择排序 选择排序的思想: 每次循环中从待排序的序列中选取一个最小值(按照升序排序),将这个最小值放到合适的位置 /// 选择排序 /// \param arr, 待排序的数组 /// \param n, 数组元素的个数 void selectionSort(int arr[], int n){ for (int i = 0; i < n; ++i) { int curMinIndex = i; for (int j = i+1; j < n; ++j) { if(arr[curMinIndex] > arr[j]){ curMinIndex = j; } } std::swap(arr[i], arr[curMinIndex]); } } 2. 冒泡排序 冒泡排序中每一次循环把……

阅读全文

OpenCV with Python

一、Python OpenCV 入门 欢迎阅读系列教程,内容涵盖 OpenCV,它是一个图像和视频处理库,包含 C++,C,Python 和 Java 的版本。 OpenCV 用于各种图像和视频分析,如面部识别和检测,车牌识别,照片编辑,高级机器人视觉,光学字符识别等等。 你将需要两个主要的库,第三个可选:python-Ope……

阅读全文