主页

定义区分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 视情况而...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits