基础知识
文章平均质量分 93
落樱弥城
无无
展开
-
图像处理之频域滤波DFT
傅里叶变换可以将任何满足相应数学条件的信号转换为不同系数的简单正弦和余弦函数的和。图像信号也是一种信号,只不过是二维离散信号,通过傅里叶变换对图像进行变换可以图像存空域转换为频域进行更多的处理。本文主要简要描述傅里叶变换以及其在图像处理中的简单应用,并进行一些简单的实验来描述其相关性质。原创 2023-09-16 21:57:34 · 650 阅读 · 0 评论 -
动态库的入口——VCRT(DLL)和CRT(SO)
为了更加深入的理解动态库的加载初始化过程,本文根据VCRT和Linux-CRT的代码实现详细描述了windows和linux平台下对应动态库加载时会进行哪些工作。本文重点关注全局变量的初始化时机,以及是否有其他额外的操作。原创 2023-06-23 00:25:11 · 740 阅读 · 0 评论 -
C++ 反汇编简要
C/C++都需要经过编译器变成对应的机器码,通常编译器对程序员是个黑盒子。有些时候我们可能会纠结编译器会不会进行RVO,EBO等优化,以及一些在我们看起来应该正常的代码因为一些UB的行为被C++编译器优化成了不可预期的代码。这时候如果我们了解具体代码是如何编译成对应的二进制机器码对我们查具体的问题非常有益。另一种场景,在开发软件时,线上环境能够复现的问题,我们本地可能是无法复现的。这就需要我们根据线上的堆栈分析具体的原因。原创 2023-06-19 22:17:28 · 2432 阅读 · 0 评论 -
程序员自我修养阅读笔记——系统调用与API
1 系统调用1.1 系统调用简介 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。操作系统本身是硬件资源的管理者,系统调用就是用户通过系统访问硬件资源和一些核心功能的媒介。一般涉及磁盘访问、网络、进程管理、外设等等系统资源的访问接口。1.2 系统调用的优缺点 优点:帮助用户安全高效的访问硬件资源;合理的规划资源访问,保证系统安全的运行。同一系统标准统一。 缺原创 2022-02-06 19:01:32 · 7449 阅读 · 0 评论 -
程序员自我修养阅读笔记——运行库
主要关注程序的启动过程。1 入口函数和程序初始化1.1 程序真正的入口 通常写代码时,我们认为程序的入口是main函数,但是实际上有一些现象值得我们怀疑该结论是不是正确的。比如全局变量的初始化,C++全局变量构造函数的调用,C++静态对象的构造函数调用。 程序开始运行的入口不是main,在进入main之前程序会先准备好环境运行一些必要的代码才进入main,运行这些代码的函数称为入口函数。入口函数根据平台的不同而不同,其实实际上程序初始化和结束的地方,一个典型的程序的运行步骤如下:操作系统.原创 2022-02-06 16:59:38 · 6290 阅读 · 0 评论 -
程序员自我修养阅读笔记——内存
1 程序的内存布局 进程的虚拟地址空间一般包含几个部分:内核使用的部分,进程不可访问,不同系统占用的大小不同;栈内存:用于维护程序的临时变量和函数调用使用,分配与销毁由系统完成;堆内存:用户可以通过特定的系统调用分配的内存,分配和释放由用户完成;可执行文件映像:存储着可执行文件的内存映射;保留区:内存中禁止访问的部分。动态库映射区:用于加载动态库。2 栈与调用约定2.1 栈 在进程的VMA中,栈是一块具有FILO特性的内存区域,该区域的内存分配与释放由系统完成。VMA中的栈综上原创 2022-02-05 21:28:56 · 523 阅读 · 0 评论 -
程序员自我修养阅读笔记——Widnows下的动态链接
Linux下的共享库为so文件为ELF格式,Windows下的共享库为dll文件PE格式。1 dll简介 windows下采用dll共享对象让程序更加模块化方便升级,大多数情况为.dll文件,也可以是``.ocx,.CPL```文件。1.1 进程地址空间和内存管理 早期的windows中的进程并没有独立的地址空间,32bit的windows开始进程才有独立的地址空间,一个dll在不同进程中拥有不同的私有数据副本。但是和elf不同dll中的代码并不是地址无关的,只是在某些情况下被过个进程共.原创 2022-02-05 17:32:19 · 2296 阅读 · 0 评论 -
程序员自我修养阅读笔记——Linux共享库管理
有了共享库那么就存在对库版本的管理问题。1 共享库版本1.1 共享库兼容 共享库更新时一般会存在两种形式的更新,兼容更新和不兼容更新。这里的兼容不仅仅指接口兼容,也指ABI(Application Binary Interface)兼容,ABI兼容一般会涉及到函数调用的堆栈管理、符号命名规则、参数规则、内存分布等。一般C语言库影响ABI兼容性的几种行为(但不是全部):导出符号的行为发生改变;导出符号被删除;导出数据结构发生改变;导出函数的接口发生改变,比如返回值、参数等。 C.原创 2022-02-05 15:11:09 · 5025 阅读 · 0 评论 -
程序员自我修养阅读笔记——动态链接
1 为什么需要动态链接 动态链接,顾名思义,就是只有在程序需要调用对应的库中的实现时才将对应的库的映像文件加载到内存。相比而言,静态链接是在编译阶段就将需要的目标文件中的相关实现连接到可执行文件中。动态链接和静态链接的使用有以下几点优缺点:库所占用的内存空间和磁盘空间:对于静态链接是在生成可执行文件时就将实现连接到可执行文件中,也就是说如果多个程序都静态链接了一个库实现,那么最终不同的可执行文件中都会包含各自的一个该库的实现;而动态链接是在运行期才链接对应的库,如果内存中已经存在对应的库的映射的原创 2022-02-04 23:47:33 · 1190 阅读 · 0 评论 -
程序员自我修养阅读笔记——可执行文件的装载过程
1 可执行文件的装载过程1.1 进程虚拟地址空间 一个可执行文件被装载到内存变成程序后(进程和程序的区别在于一个是静态的一个是动态的,程序就是菜谱,进程就是厨师参考菜谱做菜的过程),拥有自己独立的地址空间。该地址空间是一个虚拟的地址空间,在该进程看来该空间内包含内核和自身,32bit系统该空间的大小是4GB,64bit系统是2的64次方-1bit。也就是说,一个程序实际上能够用到的虚拟内存空间实际上是小于理论值的,因为操作系统需要占用。1.2 装载的方式 静态装入:将程序执行时所需要的指令和数据原创 2022-01-27 23:08:06 · 2342 阅读 · 2 评论 -
程序员自我修养阅读笔记——Windows PE/COFF
本章主要将windowsPE格式和ELF格式的区别。1 Windows PE/COFF PE是windows引入的一种可执行文件格式,该格式和Linux系统的ELF文件格式同源,都是由COFF格式发展而来。在Windows上可执行文件格式为PE格式,而目标文件的格式为COFF,二者略微不同但是大体上相似。同时32bit的windows和64bit的windows的目标二进制文件格式基本相同,只不过64bit中将原PE中的32bit的字段修改为64bit。 与ELF文件格式类似,PE采用段管理数原创 2022-01-23 22:56:15 · 1974 阅读 · 0 评论 -
音视频基础之YUV格式
1 YUV格式1.1 YUV简介 YUV是一种颜色编码方式,类似于RGB颜色编码方式。YUV将亮度和色度分离,使用Y(明亮度)、U和V(色度、浓度)三个分量表示一个颜色。三个分量中UV分量只有颜色信息,如果图像只有Y分量图像就是黑白图像。一般见到YPbPr、YUV、Y’UV、YCbCr等专有名词描述的都可以成为YUV,不同的是他们使用的具体场景不同(YUV和Y’UV通常用来编码电视的模拟信号、YCbCr用来描述数字影像),在开发的过程中不需要严格区分他们。 YUV利用人对图像的亮度信息更加敏感的特原创 2021-12-16 00:53:13 · 4068 阅读 · 0 评论 -
程序员自我修养阅读笔记——静态链接
测试环境:➜ tmp uname --versionuname (GNU coreutils) 8.25Copyright (C) 2016 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute .原创 2021-09-21 22:59:09 · 305 阅读 · 0 评论 -
程序员自我修养阅读笔记——目标文件里有什么
1 目标文件格式 PC平台的目标文件格式大都是COFF的变种,比如Windows的PE(Portable Executable)格式和Linux的ELF(Executable Linkable Format)格式。并且我们一般讲的目标文件格式多指可执行文件,但是实际上编译过程中的静态库文件、动态库文件和.o或者.obj文件都属于目标文件。常见的目标文件分类:目标文件类型说明举例可执行文件可以直接执行的程序windows的exe文件、linux的可执行文件、macOs的app文原创 2021-09-21 15:24:59 · 1652 阅读 · 2 评论 -
生产者消费者模型
1 问题简介 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多进程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 要解决该原创 2020-07-29 11:55:12 · 150 阅读 · 0 评论 -
C++如何生成可执行文件
最近发现之前学习的课程大多数都忘得差不多了,就捡一下比较重要的复习一下,做个笔记。1 C++如何生成可执行文件1.1 编译的四个阶段[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eJZBs3CS-1592400130427)(C-生成可执行文件详解/all.drawio.svg)] C++从源文件到最终的可执行文件经历了如上图四个过程:预编译,编译,汇编,链接。其中四个阶段分别涉及到的工具有: 预处理器(preprocessor)、 编译器(compiler)、.原创 2020-06-17 21:24:17 · 6221 阅读 · 0 评论 -
C++多线程以及线程池
1 线程1.1 简介 线程(英语:thread)是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。 同一进程中的多条线程将共享该进程中的全部系统资源原创 2020-06-10 16:11:46 · 4953 阅读 · 3 评论 -
https及https调优
1 HTTPS1.1 HTTPS简介 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联原创 2020-06-06 12:01:36 · 3660 阅读 · 1 评论 -
网际传输协议和传输控制协议(IP,TCP,IP)
文章目录1 简介2 IP2.1 简介2.2 IP的可靠性2.1 IP Header2.3 IP分片和重组3 TCP3.1 简介3.2 TCP Header3.3 TCP 三次握手3.3.1 为什么是三次握手3.4 TCP四次挥手3.5 TCP 流量控制3.6 TCP 拥塞控制3.6.1 慢启动3.6.2 拥塞避免3.6.2 快速重传3.6.3 快速恢复3.7 TCP Socket编程3.7.1 过程3.7.2 socket API3.7.3 简单示意3.8 TCP黏包问题4 UDP4.1 UDP Heade原创 2020-06-04 17:03:06 · 4142 阅读 · 0 评论