自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 汇顶2018应用硬件工程师笔试题

主要涉及知识有模拟电路、数字电路、单片机、C语言、射频等方面。 包括选择题、填空题、编程题和简单题。 选择填空有: 全差分运放(差分输入差分输出)的差模和共模输出电压计算。 ESD知识。 10:1无源探头的校准,判断过补偿、完全补偿、欠补偿的波形,主要看输入输出时间常数的关系。 ADC的量化误差。 史密斯圆图,短路和开路点。 电阻并联时的噪声电压。 射频方面,P1dB,IP3,动...

2018-08-24 00:27:07 4261

原创 linux I/O多路复用机制之select使用及源码解析

select是一种同步I/O复用机制,在大多数操作系统中都有实现,移植性较好;但是能够监听的文件描述符个数有限,而且采用轮询方式,效率较低。#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int

2018-05-24 10:25:36 339

翻译 理解C和C++中的左值和右值

翻译至https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/ C/C++编程中不是经常出现术语(左值)和rvalue(右值),但是一旦出现,它们的语意就不是特别清晰。最经常看到它们的地方是在编译错误和警告信息中。比如,用gcc编译下面的程序:int foo() { retur...

2018-04-13 16:18:02 58877 20

原创 STL queue和priority_queue源码解析

整理至侯捷《STL源码剖析》 STL中实现了先入先出(FIFO)队列和优先队列。要想使用只需包含< queue >头文件,SGI版本源码中将其实现在stl_queue.h头文件中。下面详细分析这两种队列: 先入先出队列 queue也和stack一样是一种容器适配器,底层采用其它容器适配而成。双向开口,只运行尾部插入元素,头部弹出元素,不允许遍历,则不需要实现迭代器,实现较简单...

2018-04-12 15:21:50 354

原创 STL stack源码解析

整理至侯捷《STL源码剖析》 stack是一种后进先出(FILO)的数据结构,单向开口,只能在栈顶执行push、pop和top操作,不允许遍历。 STL中stack是以底层容器来实现的,所以称之为容器适配器(container adaptor)。 SGI将其实现在stl_stack.h头文件中,实现非常简单,不需要提供迭代器:template <class _Tp, ...

2018-04-11 11:41:35 978

原创 STL deque源码剖析

deque(double-ended queue)是一种双向开口的序列容器,可以在头部和尾部进行push或pop操作,与vector不同,deque不是真正的连续线性空间,它是由分段连续空间动态组合而成。 map是一个二重指针,指向一个指针数组,数组中每个元素都为指针,指向各个相同大小的缓冲区,容器deque中的元素就放在这些缓冲区中,当map中的缓冲区满载后,就会配置一个新的map指向...

2018-04-10 13:13:06 282

原创 SGI STL容器list源码解析

template < class T, class Alloc = allocator<T> > class list;list是一个序列容器,运行在任何位置进行常数时间插入和删除操作,并且可以双向迭代。list容器使用双向循环链表实现,与其他序列容器(array,vector,和deque)相比,list在指定位置插入,抽取,和移动元素表现更好,时间复杂度为O(1)...

2018-04-08 21:42:01 407

原创 SGI STL容器vector源码解析

vector是个序列容器,被称为动态数组,类似于C/C++中的数组,但是其空间能够动态变化。 使用只需要包含vector/vector.h头文件,但是SGI将其实现在stl_vector.h头文件。 实现如下:首先定义了vector基类_Vector_base,主要用于两个目的,首先,_Vector_base的构造器和析构器只分配空间单不初始化,这使得异常安全更容易;其次,封装了SGI风格...

2018-04-06 16:58:00 278

原创 C++中的单例模式的实现

这几天看了下C++中单例模式的实现,发现涉及到的问题实在太多。现将看的总结如下: 单例模式顾名思义就是类只存在一个实例,分为懒汉式和饿汉式两种:懒汉式是在要使用单例的时候才创建对象,延迟了类对象创建的时间,一定程度上节省了空间,但是线程不安全;饿汉式就是在static单例指针定义时就直接创建对象,是线程安全的,因为一般多线程程序都是从单线程开始启动的,将单例的创建过程放在启动时就不会有线程安全问...

2018-03-28 20:11:18 1163

原创 Qt中出现0xc0000135错误

运行时异常结束,调试时出现 一般是用第三方库时,动态库丢失,所以构建时没错误,但运行出错,应将用到的第三方库的dll动态链接库放到程序exe文件所在目录下。...

2018-03-23 10:00:16 3602

原创 SGI STL 迭代器解析

整理至侯捷《STL源码剖析》 迭代器是一种设计模式,现在编程语言基本都语言层面支持了这种模式,定义如下:提供一种方法,使之能遍历聚合物(容器)中的各个元素,而又不暴露聚合物内部的实现细节。 在STL中,迭代器在容器和算法之间扮演着桥梁的作用,算法通过迭代器访问容器中的数据。迭代器要实现下面几个功能:迭代器是一种智能指针迭代器要实现相应型别萃取机制由于算法中可能要用到用迭代...

2018-03-22 10:28:36 284

原创 linux下C语言实现的线程池

最近看到的一个很好的C语言实现的线程池。这个线程池具有比较好的动态调整能力。 https://docs.oracle.com/cd/E19120-01/open.solaris/816-5137/ggedn/index.html 外部接口:构造一个线程池,注意这里并不创建线程,只是设置相关参数 min_threads:线程池中存在的最少可用的线程数; max_threads:线程池中...

2018-03-21 11:41:03 600

原创 SGI STL空间配置器解析

整理至侯捷的《STL源码剖析》 一般的C++内存配置操作为class Foo { ... };Foo *pF=new Foo;delete pF;new运算符包含两步操作:调用 ::operator new 配置内存调用 Foo 的构造函数构造对象delete运算符也包含两步操作:调用 Foo 的析构函数析构对象调用 ::operator delete 释放...

2018-03-14 19:29:13 149

原创 C++中的虚函数机制

面向对象的三大特性是封装、继承、多态。C++中有静多态和动多态的概念:静多态就是在编译时决定,比如函数重载;动多态就是在运行时决定,具体使用就是通过基类对象的指针或引用指向继承类对象,在运行时实现动态绑定,底层实现就是通过虚函数机制。 C++中动多态实现条件:有继承关系有虚函数覆写(override)基类的指针或引用指向继承类下面就不同的继承关系详解虚函数机制:单继承...

2018-03-13 21:19:48 232

原创 C++中new/delete、operator new/operator delete、placemet new

new/deletestring *ps=new string("hello");delete ps;new表达式实际上执行了三步操作:调用operator new标准库函数分配内存空间运行string类的构造函数构造对象返回指向该对象的指针delete表达式实际上执行了两步操作:调用ps所指对象的析构函数调用operator delete标准库函数释放内存空间 ...

2018-03-12 22:07:16 189

原创 linux内核链表

linux内核中的链表不同于我们在数据结构中学习的链表。一般的我们定义一个单链表节点,我们会在节点中给出指针域和数据域,比如:struct listNode{ struct listNode *next; ElemType data;};但是这会有个不好的地方,对于不同的数据域的类型,我们要编写不同的链表实现,当然我们也可以用宏定义或者C++中的模板来处理。li...

2018-03-08 23:43:09 161

原创 valgrind的使用

valgrind是一个强大的动态分析工具框架,它的工具是模块化的,标准的版本包括下面这些工具:Memcheck、Cachegrind、Callgrind、Helgrind等。 下面介绍一下内存错误检查工具Memcheck的使用。 下面在ubuntu16.04下测试。 一、安装valgrindsudo apt install valgrind二、用vim编辑输入下列程序test.c#includ

2017-02-08 17:40:48 208

原创 c++的深拷贝和浅拷贝

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-01-06 12:21:38 179

空空如也

空空如也

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

TA关注的人

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