分类 C/C++ 中的文章

NES模拟器

前段时间把以前上传到优酷上的视频搬到了B站上,里面包含一个用STM32F407单片机上移植Nes模拟器玩超级玛丽的视频。视频大概是下面这个样子的。当时一只手玩,另一只手拿着HTC安卓手机拍的,那时候还是安卓手机刚刚兴起,好像小米也才刚发布第一款手机。所以拍摄的效果并不好,仅仅用作……

阅读全文

C++中的字符串split

使用过Java, Python或者go这些语言然后切换到C++的同学很可能遇到一个问题就是:为什么在C++的string类里面为什么没有提供一个split函数呢? 猜测可能有下面几个原因: split之后的结果存放在哪里呢?vector?但是string类中引入vector势必会造成s……

阅读全文

C++11中的多线程库

1. 线程的创建 C++11中提供了thread类可以直接用来创建线程,创建步骤: 包含thread所在的头文件 #include <thread> 在需要的地方直接创建一个thread对象,构造函数中传入一个线程入口函数(或者是一个可调对象)。(普通函数,lambda表达式,重载了()的类都可以传入,普通类成员函数也可……

阅读全文

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提供的……

阅读全文

排序算法

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. 冒泡排序 冒泡排序中每一次循环把……

阅读全文

C++对象模型

1. 类对象多占的空间 sizeof(空类) = ? 静态成员变量/函数,不占用类对象的空间 有虚函数时,类对象会多一个指针大小的空间(指向虚函数表vftbl) 对齐? 2. 对象结构的演化和发展 3. this指针的调整 4. 分析obj文件 5. 拷贝构造函数 6. 程序转化语义 7. 程序的优化 class Value{ public: };……

阅读全文