自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

仰望星空

Using no way as way, having no limitation as limitation.

  • 博客(32)
  • 资源 (2)
  • 收藏
  • 关注

原创 地址_前世今生

一、 ALUALU(arithemetic and logic unit),书面意思是:算术与逻辑部件,运算器,算术与逻辑单元,通俗来讲:CPU处理的数据位数。从4位、8位、16位、32位,处理能力越来越强。图1 ALU宽度、地址总线根数的演变发问:16位计算能力如何处理20位的地址呢?二、 CS:IPCS:IP 是一组寄存器,用于告知 CPU 当前将要读取的汇编指令的地...

2018-10-31 22:17:45 296

原创 类和对象_继承

一、 继承1. 继承关系是类中成员方法的关系:class Base{ public: void show() //方法1 { cout<<Base::show()<<endl; } void show(int a) //方法2 ...

2018-10-31 19:20:33 307

原创 STL源码剖析---copy

一、 泛型copytemplate<typename SrcIt, typename DesIt>void mcopy(SrcIt first, SrcIt last, DesIt desit){ while (first != last) { *desit = *first; first++; }}二、 测试从调用copy函数的时候,我们可以看到...

2018-10-30 11:38:43 198

原创 动态存储管理

       --------参考文献   严蔚敏, 吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2007:193-213.一、 可用空间表1.1 缺点系统在不断进行分配和回收的过程中,大的空闲块逐渐被分割成小的占用块,在它们重又成为空闲块回收之后,即使是地址相邻的两个空闲块也只是作为两个结点插入到可利用的空间表中,以致使得后来出现的大容量的请求分配无法进行。1....

2018-10-30 11:23:32 825

原创 线程_带来的问题

目录一、 数据共享二、 语句不具有原子性一、 数据共享数据指的是全局、静态、堆区、文件描述符等。#include<stdio.h>#include<pthread.h>#include<string.h> //strtok()#include<assert.h> //assert()/*thr_fun1线程切割线程...

2018-10-30 00:15:55 225

原创 STL源码剖析---find_if

目录一、主要内容1.1 思路1.2predicate1.3绑定器1.4 取反器1.5find_if1.6其他1.7测试一、主要内容1.1 思路泛型算法find_if实现了找出给定区间首个满足特殊条件的元素。(首次大于,首次大于等于,首次小于,首次小于等于)。关于泛型函数find_if,如果我们是设计者,如何去设计。我们可能会想,给定查找区间...

2018-10-29 23:29:36 435

原创 硬件结构框架_北桥_带宽

本篇博客只想回答一个问题:北桥出现是很有必要的,它的存在对计算机性能有了很大的提升!但是它为什么会出现?它未出现以前性能提升面临的瓶颈是什么???数据带宽 = 总线频率 × (数据位宽÷8) 单位是 B/s、KB/s、MB/s、GB/s ...... 注意换算是1000,不是1024。数据带宽类似于名词“速度”。很明显,带宽越大越好!频率单位是赫兹系列(/s),数据位宽÷8 就变成字节;两...

2018-10-29 14:42:11 1090

原创 关键字_restrict

本篇博客谈论C语言关键字restrict,只用于修饰指针,功能是帮助编译器进行优化!

2018-10-29 00:07:33 12749 1

原创 线程_验证线程间共享性(全局、静态、堆、文件描述符)

思路:是否允许共享关系到是否采用了写实拷贝技术;如果不允许共享,两个线程去读取同一个对象,这没问题(只读属性)。但是,如果,有一个进程想要去修改这个对象,操作系统会为该线程在他处拷贝一个新的对象以作修改之用。如果允许共享,那么这个对象始终只会有一份。这就是验证各种对象(全局、、静态、堆、文件描述符)是否共享的关键!一、 全局线程thr_fun1试图将全局数据n = 10000修改为n = ...

2018-10-28 15:27:42 1758

原创 线程_初识线程

 从图1 我们应该能够推测出,同一进程中的所有线程所对应的进程ID将会是一样的,而各个线程ID是不同的。做一个小实验来验证一下吧。图1 进程与线程关系示意图代码验证 #include<stdio.h> //printf()#include<pthread.h> #include<unistd.h> //sleep()void* th...

2018-10-28 13:47:43 175

原创 STL源码剖析---sort

目录一、 泛型算法二、 简单实现sort2.1 思路2.2 包含的头文件2.3 重载输出运算符2.4 简单实现sort2.5 交换函数实现遇见的问题(承接2.4节)2.6 冒泡函数实现遇见的问题(承接2.4节)三、 总结3.1 测试用例3.2 感想一、 泛型算法泛型算法是STL库里面定义的一些算法,这些算法可以用同一个接口操作各种数据类型,...

2018-10-28 00:51:35 666

原创 进程和线程的区别

一、 区别  进程是资源分配的单位,线程是CPU调度的单位。  线程的切换效率比进程的切换高。  同一个进程内的线程共享数据&文件描述符(不安全)。  进程不共享数据&文件描述符(独有)。 二、 线程的实现方式2.1 用户级用户自己管理所有进程、一条线程的阻塞会导致整个进程的阻塞;      线程切换不需要陷入内核;2.2 内核级用户不需要手动管...

2018-10-26 20:15:44 129

原创 数据类型扩展

记住两句话:位宽相等,不改变数据在内存中的存储形式; 位宽不等,基准是int类型;原始类型是unsigned,填充零;signed,填充符号位。请看例子:例子1signed char a = 0xe0; //第一行unsigned int b = a; //第二行unsigned char c = a; //第三行a == c; /...

2018-10-24 19:31:39 341

原创 IPC_简单应用共享内存实现进程间通信

 --------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:459-462.目录一、 共享内存1.1 定义1.2 方案设计1.3 相关知识二、 代码实现2.1 信号量部分2.2 写进程(留心)2.3 读进程一、 共享内存1.1 定义共享存储允许...

2018-10-24 13:17:19 597

原创 IPC_简单应用消息队列实现进程间通信

 --------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:451-454.目录一、 消息队列1.1 定义1.2 方案设计1.3 相关知识二、 代码实现2.1 数据结构设计2.2 发送消息 2.3 取用消息2.4 测试运行 一、 消息队列1.1...

2018-10-22 07:13:10 355

原创 IPC_简单应用信号量实现进程间通信

  --------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:455-459.目录一、问题引出1.1 情景模拟1.2 设计方案1.3 相关知识二、 代码实现2.1 头文件semaphore.h2.2 源文件semaphore.c2.3 测试文件a.c和b....

2018-10-21 12:00:53 732

原创 段页式(32位地址总线)

32位地址总线,其支持的物理地址空间最大是4GB,超出部分无法寻址。 一个(32位)地址对应(或指向)一个存储单元(存储单元大小是一字节);如果将4*1024个存储单元聚在一起形成整体,就是下文中即将提到的概念——页。图1-1 存储单元汇聚前图1-2 存储单元汇聚后如图1-1 所示,在存储单元没有汇聚前,小方格总数是4GB/1B=2^32个,需32个比特位才能表示;如图1-2 所示,在...

2018-10-20 00:15:56 2239

原创 fork函数_实例(3)调用两次以避免僵死进程

--------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:189-190.一、 相关概念 1.1 僵死进程一个已经终止,但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息、释放它仍占用的资源)的进程被称为僵死进程(zombie)。ps(1)命令将僵死进程的状态打印为Z。如...

2018-10-18 16:56:22 445

原创 函数wait和waitpid

                 --------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:190-192.目录一、引言 二、 打印exit状态的说明三、 测试用例一、引言 当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。因为子进程的终止是一个异步...

2018-10-18 00:00:21 257

原创 STL源码剖析---移动advance和距离distance

一、 激活重载函数参数列表光有类型,而没有变量名——因为变量压根儿就不会在函数内用到。为了重载而存在,主要和第五部分结合起来看。#include<cstddef> //为了引入 typedef int ptrdiff_tstruct input_iterator_tag{ }; //只读标签struct output_iterator_tag{ }; //只写标签...

2018-10-16 12:39:05 523

原创 继承(4)

继承(3)情景:基类虚函数属性是public,派生类虚函数属性是private,使用基类指针指向子类对象,该指针能调用基类私有的函数。#include&lt;iostream&gt;using namespace std;class Base{public: virtual void show() { cout &lt;&lt; "Base::show()" &lt;&l...

2018-10-15 16:08:55 90

原创 继承(3)

继承(2)基类和子类给定不同的参数默认值,验证基类指针指向子类对象会发生什么?一、 代码模拟 #include&lt;iostream&gt;using namespace std;class Base{public: virtual void show(int a = 10) { cout &lt;&lt; "Base::show()" &lt;&lt; a &l...

2018-10-15 15:55:19 148

原创 STL源码剖析---移动advance

目录一、 迭代器二、 类型萃取机2.1 处理类实现的迭代器2.2 处理原生指针实现的迭代器三、 advance3.1iterator_category3.2 激活重载机制3.3 实现advance函数 --------参考文献 侯...

2018-10-15 13:40:22 1438

原创 输出教师和学生的信息

基类: #include&lt;iostream&gt;#include&lt;string&gt;using namespace std;/*实现一个函数打印学生、老师信息*/class person{public: person(string name, string sex, int age) :_name(name), _sex(sex), _age(age) ...

2018-10-14 23:38:23 898

原创 判断给定序列是否为BST后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。目录一、BST1.1 定义1.2 性质二、思路2.1 非递归版本2.2 递归版本一、BST1.1 定义BST(Binary Search Tree)二叉搜索树:所有非叶子结点至多有两个孩子(二叉搜索树也属于二叉树的范畴); 所有结点只存储一个关键字...

2018-10-13 19:15:37 927 2

原创 继承(2)

继承(1)工欲善其事必先利其器,学任何语言,语法都是很重要的。例子1 子类对象大小是???#include&lt;iostream&gt;using namespace std; class Base{public: int _a;protected: int _b;private: int _c;};class Derive : public Base{...

2018-10-09 10:32:42 110

原创 STL源码剖析---类型萃取

推荐反复阅读第三部分反思与总结,真的体会到了第三部分表达的意思后,第一、二部分走马观花也无妨。目录一、 背景二、 解决办法2.1 函数模板类型自推2.2 声明内嵌类型2.3 类型萃取机三、 反思与总结一、 背景在算法中运用迭代器时,很可能会用到相应类型(associated type)。什么是相应类型?迭代器所指之物的类型便是其中之一。假设算法中有...

2018-10-08 16:31:03 532

原创 简单实现STL库中的容器vector

一、简要说明本篇博客实现的容器仅仅可存放任意基本数据类型的元素,但是还没有实现容器可存放容器类型的元素(类似于多维数组)。二、代码实现        2.1 数组声明#define INCREASEMENT 2 //容器满时,扩容为原来的2倍#define DEFAULTVALUE 100 //容器默认存放100个元素template&lt;class item&gt; /...

2018-10-06 10:15:31 323

原创 简单实现内存池

目录一、背景二、 思路2.1 数据结构2.2 设计类 三、 代码实现 一、背景The design and use of memory pool, resolved the problem of time and space inefficiency caused by frequently applying and releasing memory to the o...

2018-10-05 12:29:09 633

原创 模拟实现boost库中的weak_ptr

目录一、提问二、 代码实现2.1 mweak_ptr的具体实现2.2 测试用例一、提问weak_ptr为什么会存在?shared_ptr不是已经有了引用计数吗?具体原因详见模拟实现boost库中的shared_ptr,简单来说就是为了解决循环引用(交叉引用)的问题。weak_ptr是为了配合shared_ptr而引入的一种智能指针,更像是shared_ptr的一个助手而...

2018-10-04 12:10:33 599 1

原创 STL源码剖析---shared_ptr

目录一、 引言二、 代码实现2.1 模拟实现shared_ptr2.2 测试用例三、 潜在问题分析你可能还需要了解模拟实现C++标准库中的auto_ptr一、 引言与auto_ptr大同小异,shared_ptr也是一个类。可以实现多个指针指向同一个对象(引用计数)。发生拷贝的话都指向相同的内存。每使用一次,内部引用计数加1; 每析构一次,内部引用计数减...

2018-10-03 22:59:26 4600 3

原创 STL源码剖析---auto_ptr

目录一、 引言二、 潜在问题的讨论三、 代码实现3.1 auto_ptr简单实现3.2 用于举例的一个类3.3 测试用例四、 总结一、 引言C++标准库中有一个auto_ptr可供我们参考。这是一个用来包装原生指针(native pointer)的对象,声名狼藉的内存漏洞(memory leak)问题可籍此获得解决。根源在于对象实例化后变量离开作用域会自动...

2018-10-03 16:40:21 734

使用读进程和写进程熟悉unix高级环境编程中出现了消息队列操作函数

压缩包内含4个文件:msg.h(定义消息结构)、msg.c(包含同名头文件)、snd.c(内部转调msgsnd函数发送消息)、rcv.c(内部转调msgrcv接收消息)。重点感受:消息是有类型——这再普通不过的事实。

2018-10-22

利用信号量实现进程间同步

压缩包内含4个文件:a.c,b.c是两个源文件,分别用来模拟读端和写端。semaphore.h和semaphore.c主要实现了sem_init,sem_p,sem_v,sem_del这四个函数(函数体内是转调semget,semctl,semop,这三个函数都是linux提供的库函数)。以一个.txt文件来模拟临界资源。

2018-10-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除