定义区分gnu,llvm编译器和unix运行环境的预定义宏
前言
本文仅针对 MacOS 以及 Linux 平台(Ubuntu)的 llvm-clang++ 和 g++编译器测试, 用于跨平台程序开发.
区分运行环境(操作系统)
#ifdef __APPLE__
#include "zemaphore.h" // 自定义
#elif __linux__
#include <semaphore.h> // pthread
#endif
区分编译器
因为 clang 也采用了 gcc 的部分扩展, 所以包含了__GNUG__宏, 于是只能通过双重判定来做:
#ifdef __GNUG__
#ifndef __clang__
printf("lg of %d is %d\n", x, std::__lg(x)); /...
Stl源码剖析笔记_迭代器与traits编程技法
写在前面
第一部分内容算是一个总览, 介绍各种组件的联系, 内存分配部分之后看完视频再来温习, 先看看迭代器部分(感觉容易被问到).
迭代器的本质
迭代器是一种行为类似指针的对象.
智能指针, 并且重载了内容提领(deference, ->)和成员访问(member access, .)运算符, 使其使用起来像一根指针.
Stl源码剖析笔记_容器
写在前面
这部分内容包括序列式容器和关联式容器两种,
序列式容器
vector
动态扩容
开辟新的内存空间
复制旧的元素到新的内存中
释放旧的内存
list
deque
只是用起来像连续内存空间(拥有随机访问迭代器), 实际上是由多块离散的内存串接起来的.
stack
queue
heap(priority_queue)
关联式容器
写博客时候常用的一些提高效率的插件
写在前面
写一下写博客常用的几个方便的插件, 专注码字!
复制 markdown 格式超链接: Rich URL
写博客就会经常去引用别人的好文章, 而这时候复制超链接就是个麻烦事了, 众所周知 markdown 里面的链接格式是[名称](链接), 那就需要复制两次来写引用链接(直接放网址还是不太优雅, 别人用起来也不方便).
以前用 edge时候直接复制就是 markdown 支持的链接, 可惜 edge 越来越臃肿, 还是换成 Chrome 了, 那这功能不就不能用了?
后来在 Chrome 的插件市场里面找了好几个插件, 才最终发现了这款经典的复制链接插件: 名为 Rich URL
可以定制快捷键和链接的格式, 就是最棒的, 虽然不是原生的, 也能让效率提高不少!
...
C++引用计数基类与智能指针的实现
写在前面
参考了 More Effective C++ Item28/29, 非常经典的一个条款, 把引用计数方法的实现完整呈现出来, 细节也讲得非常细致.
测试代码我写在一个文件里面了, 通过 namespace 分隔, 有兴趣的同学可以看这里:
Effective-Cpp-All/more-effective-c++/Techniques_Idioms_Patterns/item29_Reference_Counting.cpp at main · zorchp/Effective-Cpp-All · GitHub;
技巧/准则
struct 嵌套于 class的 private 段落内, 可以很方便地让该 class 的所有成员有权处理这个 struct, 而又...
操作系统导论笔记 持久化
写在前面
这部分主要是讲数据的持久化, 也就是磁盘存取, 其实对应了内存虚拟化中交换空间那块. 当然还有一些分布式系统的内容, 这里就不提了.
这本书真的很经典!
I/O 设备
寄存器
数据寄存器
指令寄存器
状态寄存器
磁盘寻址
DMA
直接内存访问
中断
慢的系统: 中断
快的系统: 轮询
或者二者结合
(硬件)中断允许 CPU 计算与I/O 操作重叠, 这是提高 CPU 利用率的关键.
磁盘驱动器
性能评价指标
寻道时间(多磁道)
旋转延迟(单磁道)
磁盘调度
最短寻道时间优先: SSTF
可能导致饥饿
电梯: SCAN
以跨越磁道的顺序来服务磁盘请求
最短定位时间优先: SPTF
视情况而...
共计 465 篇文章,59 页。
您是Zorch的第 个小伙伴
Hits