自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【AI生成】Python中类关系调试inspect工具

llama生成的关于python碎片知识。对于debug python程序很有用

2024-02-26 09:55:42 160

原创 从光学角度认识相机与镜头

摄影入门理论学习

2022-10-06 20:31:12 1050 1

原创 进程前后台与SIGHUP

进程前后台与SIGHUP阮一峰前台任务是独占命令行窗口,只有运行完了或者手动终止才能执行其他命令。后台任务的特点:继承当前 session (对话)的标准输出(stdout)和标准错误(stderr)。因此,后台任务的所有输出依然会同步地在命令行下显示。不再继承当前 session 的标准输入(stdin)。你无法向这个任务输入指令了。如果> 它试图读取标准输入,就会暂停执行(halt)也就是说:只有前台任务能接受你的输入,一个后台任务遇到输入时会挂起后台任务也可以输

2021-01-21 21:19:06 226

原创 cmake两种变量详解

cmake有两种变量:normal和cache。参考官网说明normal就是我们普通使用的变量,比如set(VAR "xyz")cache是cmake缓存的变量,比如cmake -D定义的变量,通常这些变量会存在CMakeCache.txt里面,第一次跑cmake的时候会生成这个文件两种变量可以同名,当变量${VAR}展开时,cmake会先尝试去查找normal变量,如果没找到定义则会去使用cache变量里查找。可以使用set(VAR "xyz" CACHE STRINGH "this is a

2020-12-24 09:53:18 802

原创 现代汇编语言

现代汇编学习之前学的80x86汇编太古老了,甚至连第一版linux kernel代码都看不懂,现在整理一下一些汇编知识,主要是针对x86架构的。当然,学习汇编本身不是我们的终极目的。我们的目的是为了更好开发软件或者高性能库,因此会介绍一下编译,链接的原理和流程。汇编语言类型AT&T是这个实验室提出的一种语法,注意它和指令集是没关系的,仅仅是一种语法而已。对于x86处理器,立即数由$,寄存器由%引用。对于arm处理器,直接使用arm官方的语言格式。intel本科会学到的一

2020-12-12 13:46:46 1818

原创 CPU访存行为优化

常见优化分块:形式上,把一个循环切分成两层循环。目的是为了改变访存的顺序,把访问数据的模式限定在某个局部区域,使得cache不至于频繁替换,需要结合循环交换技术才能达到此目的。分块之后能更好地使用循环合并的技术,通常分块之后我们可以把块内的数据一次性load到cache。一般意义上的分块指的是分块之后且数据重用循环合并:数据重用,for(i in range(n)): b(i) = a(i) * c(i)for i in range(n): d(i) = a(i) * f(i)

2020-12-12 13:34:45 672

原创 openmp crunching

概念线程 vs 进程进程=可执行文件+执行资源+上下文(比如各个寄存器,函数栈帧)每个进程有自己的虚拟地址空间,即自己的页表进程切换会导致页表切换,cache 刷新等等,上下文比较多,所以很慢进程下面可以有很多个线程,这些线程共享进程拥有的所有资源除了CPU核心。实际上CPU调度是以线程为单位进行调度的。每个线程有自己的私有栈(当然这个栈的分配是从进程空间分配的,也就是所有线程公用进程的地址空间,所以线程之间是共享内存)如此一来,线程切换比进程切换开销就会小很多omp 执行模型ope

2020-12-12 13:30:21 491

原创 C++指针和数组以及字符串常量的类型

指针和数组名参考:《c专家编程》程序中所有的变量名或者数组名在重定位之后都只是一个地址值而已,所有引用这些变量的地方都会被替换成一个地址值。数组名仅仅是一个标号而已,没有额外的内存存储这个值,它的值存在于符号表。它仅仅是一个地址,这也是为什么数组名不能被赋值的原因(数组名是右值)。经过重定位之后,数组名已经完全是地址值了,程序中对a访问就等价于访问a的地址。指针本身占用额外的空间,这个空间存储的是某个变量的地址,同时指针变量本身也是一个标号,这个标号的值存在符号表中。存储指针变量是的内存空间,这个

2020-10-25 15:47:42 423 2

原创 C++声明和定义位置的规范和窍门

变量和函数定义的位置明确中心思想ODR通常类的定义是在头文件.h,类成员函数定义在.cc,这个.cc需要include这个头文件下面的定义通常可以对外界封装struct的成员是什么//public.hstruct sparse_matrix;//forward declarationtypedef struct sparse_matrix * sparse_matrix_t;sparse_status_t mkl_sparse_s_create_coo( sparse_matrix_t *

2020-10-25 13:53:02 872

原创 C++三巨头原则

C++三巨头原则BIG THREE:copy ctorcopy=dtorcomplx c1(0,0);//构造函数complex * pc = new complex;//构造函数complex c2(c1);//拷贝构造函数complex c3 = c1;//拷贝构造函数c3 = c2;//赋值构造函数delete pc;//析构函数copy ctor如果不自定义拷贝构造函数,编译器自带的是bit-wise copy,即浅拷贝如果一个类数据成员有指针变量,必须手动实

2020-10-25 13:47:54 171

原创 深入elf文件内部以及readelf工具的使用

文章目录inside ELF.shstrtab例子.strtab例子文件头ELF header段头表 SECTION HEADER TABLE段的类型sh_link 和 sh_info符号表.symtab例子符号的值例子弱符号和强符号inside ELFelf: executable and linkable file.现代*nix操作系统目标文件大部分都是elf一个elf的视图如下:(.bss实际上不占文件空间)一个elf文件是由很多个sections构成的(包括符号表,也看作一个secti

2020-07-11 13:53:37 3371

原创 操作系统从MBR到加载内核的开机过程

#计算机如何启动本文参考了很多博客和教程。boot大概MBR到GRUB详细[阮一峰]博客西工大蔺学弟实验报告对于现代使用MBR启动的操作系统,总的来说,开机到加载操作系统内核一共有以下几个步骤BIOS检查硬件,并且检测可以启动的软/硬。BIOS最后的指令是中断int 13h,该中断会加载用于启动的软/硬盘的第一个扇区的代码,俗称MBR,MBR里面有446个字节的代码,64字节的分区表,2字节的签名(0x55 0xAA)用于表示这个设备是可用于启动的!!如果发现后面签名不对,则查找下一

2020-07-06 22:07:10 899

原创 图论的证明套路和图论之美

图论之最图论常用奇技淫巧最短/最长路:不含奇圈⇒\Rightarrow⇒二部图:取最短的路。还有一个技巧:两条路必有分离的点,取最后一个分离的点极大极小取法Euler图的证明​ S={G∣G连通且无奇度顶点,G不是Euler图}S=\{G|G连通且无奇度顶点,G不是\text{Euler图}\}S={G∣G连通且无奇度顶点,G不是Euler图}取出边...

2020-01-08 11:58:48 3416

原创 分治递归算法

算法文章目录算法Rotated array minimumDiameter of binary treeLocal minimum in binary treeLocal minimum in grid*Polygon partition##Count inversions​ We motivated the problem of counting inversions as a good...

2020-01-08 11:56:06 268

空空如也

空空如也

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

TA关注的人

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