自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 《深入理解计算机系统》学习(10):静态库和动态库

首先,在任何给定的文件系统中,对于一个库只有一个.so文件,所有引用该库的可执行目标文件共享这个.so文件中的代码和数据,而不是像静态库的内容那样被复制和嵌入到引用库的可执行文件中。其次,在内存中,一个共享库的.text节的一个副本可以被不同的正在运行的进程共享。如果一个目标模块调用定义在共享库中的任何函数,那么就会有GOT和PLT,GOT是数据段的一部分,PLT是代码段的一部分。存档文件名由后缀.a标识。共享库是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序链接起来。

2024-03-31 10:32:02 773

原创 《深入理解计算机系统》学习(9):链接和执行

在编译时,编译器向汇编器输出每个全局符号,分类为强符号和弱符号,汇编器将该信息隐含地编码在可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。不允许有多个同名的强符号。如果有,链接器会生成一条错误信息。如果有一个强符号和多个弱符号同名,那么选择强符号。如果有多个弱符号同名,从这些弱符号中任意选择一个。

2024-03-31 10:31:17 1072

原创 《深入理解计算机系统》学习(8):浮点数和浮点代码

和整数运算操作不同,AVX浮点操作不能以立即数值作为操作数。相反,编译器必须为所有的常量值分配和初始化存储空间。然后,代码把这些值从内存读入。以摄氏度到华氏度转换的函数为例说明该过程。相应的x86-64汇编代码部分如下:可以看到,函数从标号为.LC2的内存位置读出1.8,从标号为.LC3的位置读入值32.0。.LC2有两个值:3435973837(0xcccc cccd)和1073532108(0x3ffc cccc)。机器采用的是小端字节顺序,第一个给出的是低位4字节,第二个给出的是高位4字节。

2024-03-30 10:49:43 815

原创 《深入理解计算机系统》学习(7):信息存储、整数表示和运算

1950年前后乔治·布尔注意到通过将逻辑值TRUE和FALSE编码为二进制值1和0,能够设计出一种代数,以研究逻辑推理的基本原则。最简单的布尔代数是在二元集合{0,1}基础上的定义。布尔运算&、|、~、^对应逻辑运算与、或、非和异或。可以将4个布尔运算扩展到位向量的运算,位向量就是由0和1组成的串。位向量的一个应用就是表示有限集合。例如,a = [01101001] 表示集合A = {0,3,5,6},而b = [01010101] 表示集合B = {0,2,4,6}。

2024-03-29 11:54:58 637

原创 《深入理解计算机系统》学习(6):缓存区溢出

不过,更长的字符串就会导致gets覆盖栈上存储的某些信息,随着字符串变长,超过23个字符,状态信息(返回地址和调用者的栈帧)会被破坏。缓冲区溢出的一个更致命的使用是让程序执行本来不应该执行的该函数,这是一种最常见的通过计算机网络攻击系统安全的方法,通常,输入给程序一个字符串,这个字符串包含一些可执行代码的字节编码,称为攻击代码。最近的GCC版本在产生的代码中加入一种栈保护者机制,来检测缓冲区越界,其思想是在栈帧中局部缓冲区与栈状态之间存储一个特殊的金丝雀值,也被称之为哨兵值,是在程序每次运行时随机产生的。

2024-03-28 09:48:15 625

原创 《深入理解计算机系统》学习(5):数组、结构和联合

对于数组T A[N];在内存中分配了一个LN字节的连续区域,其中,L为数据类型T的大小。标识符 A 可以作为指向数组开头的指针。

2024-03-27 10:31:57 862

原创 《深入理解计算机系统》学习(4):过程(如函数)和栈存储

返回地址作为P的栈帧的一部分,存放的是与P相关的状态。通过寄存器,过程P最多可以传递6个整数值(也就是指针和整数),但是如果Q需要更多的参数,P可以在调用Q之前在自己的栈帧中存储这些参数。设计良好的软件用过程作为抽象机制,隐藏某个行为的具体实现,同时又提供清晰简洁的接口定义,说明要计算的是哪些值,过程会对程序状态产生什么样的影响。程序可以使用栈来管理过程所需要的存储空间,栈和程序寄存器存放着传递控制和数据、分配内存所需要的信息,当P调用Q时,控制和数据信息添加到栈顶,当Q返回时,这些信息会释放掉。

2024-03-26 20:27:46 987

原创 《深入理解计算机系统》学习(3):高级语言和机器指令

Intel处理器系列俗称x86,x86一开始是第一代单芯片、16位微处理器之一。Intel处理器系列有好几个名字,包括IA32,也就是“Intel 32位体系结构”,以及最新的Intel64,即IA32的64位拓展,也称为x86-64。最常用的名字是“x86”,代指整个系列,也反映了直到i486处理器命名的惯例。

2023-12-16 12:29:11 871

原创 QT学习(19):读写设备抽象类QIODevice

qt、设备读写

2023-12-15 10:29:24 727

原创 QT学习(0):qmake和编译

生成目标文件.obj/.o,包含生成的机器码以及其他信息,如符号表(代码中所有符号,如函数、变量、标签,及其对应内存地址的表格)、重定位信息(全局符号、外部符号或库的实际地址)和调试数据(源代码文件的映射关系、函数和变量的名称、行号信息、堆栈跟踪信息等。可以根据项目文件(.pro文件)生成不同平台和不同构建系统所需的构建规则(makefile)和项目文件(.sln和.vcxproj文件)。将库文件包含到我们的程序中的过程,生成可执行文件.exe/.out,.dll/.so, .lib/.a。

2023-12-14 10:25:35 303

原创 QT学习(4):线程管理类QThread

QThread、QThreadData、QThreadPrivate、线程、事件循环

2023-12-13 10:46:08 237

原创 QT学习(2):信号槽机制

qt、信号槽机制、观察者模式、链表

2023-12-12 14:21:36 686

原创 QT学习(20):QTcpSocket和QAbstractSocket

QAbstractSocket 、QTcpSocket、QUdpSocket

2023-12-11 15:51:36 293

原创 QT学习(18):QString

QString源码和相关类分析

2023-11-27 15:09:37 484

原创 QT学习(19):QChar和QByteArray

QChar和QByteArray

2023-11-27 15:06:41 517

原创 C++学习(1):字符集和char、string

M_construct:在第一个while循环中依次复制从beg到end的所有字符,如果长度小于15,容量依旧是15,_M_dataplus._M_p指向栈上数组_M_local_buf;capacity():_M_is_local()判断_M_p是否指向数组_M_local_buf,如果是代表字符串大小小于15,字符数据保存在_M_local_buf中,字符串容量使用_S_local_capacity(15),否则字符数据保存在堆上分配的内存中,容量使用_M_allocated_capacity。

2023-11-22 15:36:34 218

原创 C++学习(2):分配器allocator

在construct()调用了构造函数,使用placement new在指定内存中构建对象(定位new允许我们在一个特定的、预先分配的内存地址上构造对象,placement new是一种特殊的operate new),并使用std::forward转发模板参数到构造函数。可以看到,在allocate和deallocate中分别调用了::operator new和::operator delete,实现分配和释放内存。operator new是一个函数,可以被重载,通过重载它,可以改变new操作符的功能。

2023-11-22 15:35:35 68

原创 Potrace:一个基于多边形的跟踪算法

→ik的箭头,我们可以关联一个惩罚,它是一个有序对(k,P),其中k是序列中箭头的数量,P是它们的数值惩罚的总和,如第2.2.3节所讨论的。为了计算惩罚,我们将多边形的顶点i精确地放置在相应的路径点vi上,这是一个在坐标平面上具有整数坐标的点(即位于原始位图中四个像素的交汇点)。我们现在将每个顶点ik关联到坐标平面上的一个点ak,不一定是整数坐标,使得ak靠近vik,并且对于多边形的任意两个连续顶点ik和ik+1,得到的线段ak,ak+1与原始子路径vik相当接近。然后,这些点的坐标可以作为整数输出。

2023-11-14 10:16:34 224

原创 QT学习(17):QT中OpenGL的简单使用

0,1,3对应顶点数组中第一行、第二行、第四行,为一个三角形,1,2,3同理,两个三角形即一个矩形。顶点数组vertices:四个顶点数据,每一行对应一个顶点,有八个float数值,分别为坐标(3),颜色(3),纹理(2)。:加工顶点数据,把顶点坐标进行平移、旋转、缩放等各种变换操作,修改各种顶点数据,比如纹理坐标,法向量等。VBO,Vertex Buffer Objects顶点缓冲区,一个元素对应一个顶点数据。0、顶点数据:CPU将顶点数据传入GPU,包括顶点的坐标、颜色、法向量、纹理坐标等。

2023-11-14 10:15:14 1435

原创 Linux系统开发(1):IO多路复用

select实现多路复用的方式是,将已连接的Socket都放入到一个文件描述符集合,然后调用select函数将文件描述符拷贝到内核里,让内核来检验是否有事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将该Socket标记为可读或可写,接着再将整个文件描述符集合拷贝回用户态,然后用户态再通过遍历的方法找到可读或者可写的Socket,然后对其处理。向poll函数传一个pollfd的数组,用于监控多个文件描述符,events是监控事件描述符的掩码,是用户感兴趣的事件;

2023-10-23 16:09:07 61

原创 《深入理解计算机系统》学习(2):虚拟内存

《深入理解计算机系统》、虚拟内存

2023-10-09 19:20:24 729 1

原创 《深入理解计算机系统》学习(1):系统组成

CPU、处理器、操作系统、指令执行

2023-10-08 21:05:56 117

原创 QT(16):Graphics View事件传播机制和qdraw项目框架

QGraphicsScene的事件传播体系结构将场景事件传递到项目,并管理项目之间的传播。QGraphicsView从键盘和鼠标接收输入事件,并将这些事件转换为场景事件(在适当的情况下将使用的坐标转换为场景坐标),然后再将事件发送到可视化场景。2、DrawScene继承于QGraphicsScene,主要实现项目的排列、组合等操作、键盘、鼠标等事件的处理、背景的绘制。1、在qgraphicsview.cpp中的鼠标点击事件中,将鼠标事件的数据赋值给新建的场景鼠标事件,并将该事件传递给场景。

2023-09-17 17:07:28 713 1

翻译 QT(15):Graphics View框架

要处理传入的拖动,请重新实现QGraphicsItem::dragEnterEvent(),QGraphicsItem::dragMoveEvent(),QGraphicsItem::dragLeaveEvent(),and QGraphicsItem::dropEvent()。在上面的示例中,即使父级旋转和缩放,子项的(0,10)点仍将对应于父项的(10,10)点。如果父项缩放(2x, 2x),则子项的位置将位于场景坐标(20,0),其(10,0)点将与场景中的点 (40,0)相对应。

2023-09-16 20:02:10 191

翻译 QT(13):QGraphicsScene

如果场景失去焦点(即有人调用clearFocus()),而item具有焦点,则场景将保留其item焦点信息,一旦场景恢复焦点,它将确保最后一个焦点item重新获得焦点。有两个选择:通过调用addItem()来添加现有的QGraphicsItem对象,或者可以调用更方便的函数addEllipse(),addLine(),addPath(),addPixmap(),addPolygon(),addRect(),或addText()之一,这些函数都返回指向新添加项的指针。场景矩形定义场景的范围。

2023-09-16 11:04:14 539

翻译 QT(14):QGraphicsItem

有时,将自定义数据注册到item(无论是自定义item还是标准item)很有用。您可以使用键值对(键是整数,值是QVariant)。若要从item中获取自定义数据,调用data()。Qt本身完全没有使用此功能,它是为了方便用户而提供的。

2023-09-15 22:35:31 640

翻译 QT(12):QGraphicsView

还可以通过创建 QGraphicsView 的子类并重新实现鼠标和键事件处理程序来提供自己的自定义场景交互。为了简化以编程方式与视图中的项交互的方式,QGraphicsView 提供了映射函数mapToScene()和mapFromScene(),以及item访问器items()和itemAt()。这些函数允许在视图坐标和场景坐标之间映射点、矩形、多边形和路径,并使用视图坐标查找场景中的item。

2023-09-15 11:58:41 630

原创 《Pro Git》笔记

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。采用版本控制系统可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。1复制整个项目目录:简单、容易犯错。2本地版本控制系统:大多都是采用某种简单的数据库来记录文件的历次更新差异。让在不同系统上的开发者协同工作?

2023-09-12 16:32:18 36

原创 QT(11):关闭事件

如果widget接受了关闭事件(QCloseEvent),窗口将会隐藏(实际上调用hide())。如果这个属性没有设置,close()的作用和hide(),setvisible(false)一样,只会隐藏窗口对象而已,并不会销毁该对象。setAttribute内:当前窗口设置为非模态,如果已经为非模态,将获取父窗口,如果有父窗口,设置为局部模态,否则全局模态。模态,只能首先对模态窗口进行操作后才能操作其他窗口,本质是父线程在子线程创建模态窗口后,父线程阻塞,等待子线程完成操作。

2023-09-10 22:43:01 1230

原创 QT(10):QObject对象的构造、析构和父子关系

在setparent函数中调用了setParent_helper函数。一、QObject对象的父子关系。

2023-09-10 21:22:17 189

原创 QT(9):事件发送

事件发送机制

2023-09-10 15:03:49 127

原创 《大话设计模式》笔记:代理模式

大话设计模式之代理模式

2023-08-14 12:03:29 26

原创 《大话设计模式》笔记:装饰模式

大话设计模式笔记之装饰模式

2023-08-14 10:48:00 56

原创 《大话设计模式》笔记:观察者模式

抽象没有依赖细节(抽象类的实现都是依赖另一抽象类,而不是其它具体类),细节依赖抽象(具体类的实现依赖抽象类,而不是另一具体类)。Subject类,可翻译为主题或抽象通知者,一般用一个抽象类实现,把所有对观察者对象的引用保存在一个容器里,每个主题可以有任何数量的观察者。又叫做发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听同一主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己。不足:抽象通知者还是依赖抽象观察者,当观察者类型多样,更新内容多样时不适合使用。

2023-08-12 17:35:36 34

原创 《大话设计模式》笔记:单例模式

复制粘贴是最容易的编程,也是最没价值的编程。

2023-08-12 15:32:19 52

原创 《大话设计模式》笔记:策略模式和单一职责原则

策略模式就是用来封装算法的,但在实践中,可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,其实就是取判断是否应该分离出类来,如果能想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责。策略模式是一种定义一系列算法的方法,从概念上来看,这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类和算法实用类的耦合。

2023-08-11 15:06:13 36

原创 《大话设计模式》笔记:三个设计原则和三种工厂模式

当要增加其它的功能时,不必像简单工厂一样修改工厂类,而是增加相应的功能类和对应的工厂类(判断的内部逻辑移动到客户端)。让具体的创建实例过程与客户端分离,客户端是通过抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相应的类,对于客户端来说,去除了与具体产品的依赖。工厂类解决的是如何去实例化对象的问题,考虑用一个单独的类来做这个创造实例的过程,这就是简单工厂模式。2.抽象不应该依赖细节,细节应该依赖抽象。

2023-08-10 14:47:27 58

原创 对象的三大特性:封装、继承、多态

封装、继承、多态

2023-08-06 22:45:43 38

原创 用于图像对比度增强的人工蜂群算法(ABC)

用于图像对比度增强的人工蜂群算法(ABC)

2023-08-01 21:49:15 175

原创 一种新的增强布谷鸟搜索算法用于灰度图像的对比度增强

一种新的增强布谷鸟搜索算法用于灰度图像的对比度增强

2023-08-01 21:47:25 83

SLIC.zip--SLIC超像素分割源码和使用实例Main函数

SLIC超像素分割源码和使用实例Main函数

2021-12-23

空空如也

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

TA关注的人

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