【6.C++基础】-智能指针

2020-08-04
阅读 3 分钟
1.8k
程序使用动态内存原因:不知道自己需要多少对象;不知道对象准确类型;需要多个对象间共享数据shared_ptrshared_ptr/weak_ptr 的“计数”在主流平台上是原子操作,没有用锁,性能不俗 {代码...} 当一个shared_ptr绑定到一个普通指针时,就将内存管理责任交给了shared_ptr,就不能再用内置指针来访问shared_ptr指向的内存。...

【6.C++基础】-锁

2020-08-04
阅读 6 分钟
1.7k
锁的意义原子性+可见性同一时间,只有一个线程执行锁中代码 + 锁内读在锁前代码执行完,写在锁释放前可见原子操作本身内核的原子是通过原子指令实现的[链接]原子库实现的一下方法可以带内存屏障来加强可见性。store //原子写load //原子读exchange //原子交换compare_exchange_weak //compare and set 性能更高,但是两...

【5.linux操作系统】-内存管理

2019-08-30
阅读 9 分钟
2.9k
从物理上需要关注物理架构,RAM的组织管理/分配/页结构,cache,cpu_cache。内存分配设计到伙伴系统、slab。从逻辑上涉及到虚拟内存,页表,地址空间。二者的使用涉及到缺页,回收,交互,共享内存等内容

【6.C++基础】-高效标准的stl实现memcpy,strcpy,strncpy,memmove

2019-08-02
阅读 3 分钟
1.9k
标准的strcpy,strncpy等C风格的char函数基本都没有缓冲区溢出校验,都算是高危函数,标准版都是基于memcpy实现,memcpy可能会出现覆盖,且4字节一次拷贝。除了给出这几个实现,开始的单字节是简化版。

【5.linux操作系统】-文件/内存/io

2019-07-17
阅读 4 分钟
2.5k
cache有对磁盘的cache是磁盘到RAM的cache,innode cache也是。还有cpu的cache相当于RAM在cpu上的cache。write()->sys_write(VFS)->ext2等的write->物理

【5.linux操作系统】-进程通信

2019-07-17
阅读 2 分钟
1.9k
1.管道 字节流 顺序(不能lseek),单向,相关进程(继承fd) pipe() fds[2]空管道读阻塞,关闭返回0,写入不超过PIPE_BUF是原子的,超过可能交叉写入,满write阻塞FIFO 有名称的管道(在文件系统中),可用于非相关进程之间

【5.linux操作系统】-同步

2019-07-17
阅读 2 分钟
1.5k
本文介绍了liunx提供的同步机制。开发中线程和进程的同步机制 linux同步机制 1.原子 atomic_t2.自旋锁 spinlock 时间小于两次系统空间切换,不需要调度,不允许睡眠时建议 {代码...} 3.信号量 不可用推进等待队列,让其睡眠 {代码...} 4.互斥体 {代码...} 5.完成变量 completiion6.BLK 大内核锁 全局自旋锁7.seq锁 类似C...

【5.linux操作系统】-中断/软中断/时钟

2019-07-17
阅读 2 分钟
2.5k
中断处理工作,例如对接收中断进行中断或复位硬件,这些工作都在所有中断被禁止的情况下完成。可以稍后完成的工作推迟到下半部,在合适的情况下执行下半部分中断当网卡接收流入网络的数据包时,需要通知内核数据包到了,网卡需要立即完成这件事,从而优化网络的吞吐量和传输周期,以避免超时。因此网卡立即发出中断,通...

【5.linux操作系统】-内核进程/线程/系统调用/调度

2019-07-17
阅读 4 分钟
2.8k
1.CFS时间记账:task_struct的se vruntime(这个时间是经过了所有可运行进程总数的标准化,理想下相同优先级有相同vruntime)选择最小vruntime 红黑树 可运行队列,最左侧节点缓存2.实时调度FIFO,RR,IDLEFIFO:一直运行直到阻塞/更高优先级的抢占RR:有时间片,耗尽后,同优先级轮流IDLE 比nice19优先级还低

【6.C++基础】-算法leetcode

2019-06-21
阅读 26 分钟
1.8k
广度优先搜索(breadth-first-search)、深度优先搜索(depth-first-search),以及中序遍历、后序遍历和前序遍历之间的差别。堆总能找到最大值,但代价就是寻找其他任何一个值所需的时间都是O(n)。插入和删除所需的时间依然是O(logn)BFS用queue,dfs在另一个笔记里有很多例子。

【6.C++基础】-算法-KMP

2019-06-14
阅读 2 分钟
883
为何连算法都会总忘记=。=反省,脑袋有包关键点:target串(长的),partten串,如果二者在j上不等,将partten可以向前移动next[j]而取代只前移1如何确定next[j]? T与P在j-1前都相等,所以若移动后想要相等,移动后的前面部分也要与这部分T相等,三者相等:T[j-k~j]=P[j-k~j]=P[1~K],否则移动都是冗余的 即转为短串P的...

【6.C++基础】-算法-动态规划

2019-06-13
阅读 2 分钟
2.2k
最优解 依赖重复计算的 独立的 子过程1.发现最优解结构2.推到递归式3.自低向上存储子过程结果过(备忘录,非最优子过程,只是存储,类似迷宫)4.最优解的存储和计算

【3.工程开发】-基础gdb/shell/git

2019-05-28
阅读 2 分钟
1.1k
上线merge多次,回滚master?保留merge前的分支,删除当前分支再切到新分支。git push -f origin feature_daily_xinghongyan_1:feature_daily_xinghongyan_1 不带feature_daily_xinghongyan_1就是直接删除将某次提交提到另一个分支上。比如在master上不小心提交了,想改到feature_daily_xinghongyan_1中 git log -1 获取...

【6.C++基础】代码常识

2019-05-28
阅读 10 分钟
1.6k
返回数组的形式直接return array只会返回第一个元素哦!下面介绍四种返回数组方法 {代码...} 单例1.饿汉实现 {代码...} 2.懒汉实现 pthread_once,atexit(Destroy); {代码...} 2.懒汉实现 锁,atexit(Destroy); {代码...} 4.懒汉 静态对象,保证只有一个,不用new,不需要析构 {代码...} 5.测试函数 {代码...} 以上程序的...

【6.C++基础】-模板/auto详解

2019-05-28
阅读 4 分钟
2.4k
实例化:指的是生成模板代码。显示实例化关键词是template ;会实例化所有成员,控制在一处实例化,其他用extern template引入

【5.linux操作系统】-进程

2019-05-24
阅读 3 分钟
2k
进程/线程先申请虚拟地址空间4G,其中1G的内核空间是所有普通进程/线程共享的。每个在创建的时候在内核栈底部申请一个thread_info,进程通过fork,线程clone(区别是传入一些共享的东西)。thread_info 结构体中有一个 struct task_struct task,task 指向的就是这个进程或线程相关的 task_struct 对象。thread_info 结...