自定义博客皮肤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)
  • 收藏
  • 关注

原创 【原创】深入理解虚函数表

关键字:虚函数,虚函数表,动态绑定,静态绑定,指针要点但凡一个类里有虚函数,无论多少个,它都会维护一个虚函数表,这个虚函数表由这个类管理,所有实例共用一张虚函数表会被放在每个实例的最前面——地址空间的前四/八个字节存放虚函数表的指针,这是为了在发生对象切片的时候虚函数表不会被切掉假如一个类 class A 有一个实例 a,如何获得其虚函数表?以32位机为例,如果是64位机,这里需要把 int 换成 double、long long等八字节类型&a:取 a 的地址(int*)(&a

2022-03-05 10:19:50 178

原创 【C\C++】从内存的角度玩转字符串

首先交代一下这个问题的背景。我们要做的是一个类似于字符串拼接的工作。实际是把一个关系数据库内,来自不同表的不同record拼接起来,就是所谓的join操作。在这个数据库里,所有的 record 是以 void* 的形式存储的。很多朋友可能不理解数据库存储的方式,简单说一下。比如一个数据库,它的表头是(id,name,age),假如说有一条record是(1,“Liming”,17)。这一条 record 里面的三个数字,是完完全全以首尾相连的字节形式存储在磁盘上的。也就是说,机器只认你这块的二进制码,不

2021-11-07 22:45:13 1215

原创 【分布式】CUDA编程模型

GPU 的架构决定了(众多的计算单元 ALU)它要解决的问题和 CPU 完全不同:CPU 去做相对较少的高级计算,而 GPU 是做大量的、机械的计算。GPU 无法单独工作,必须由 CPU 进行控制调用才能工作。CPU 可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用 GPU 进行并行计算。CUDA 程序分两部分:**执行在 host(CPU) 内的串行 C 程序,和其中嵌入的并行 C 程序,并行 C 交由 device(GPU)执行。**可以把 GPU 想象为一

2021-11-04 22:20:56 336

原创 【C/C++】内存管理(一):shared_ptr

智能指针是<memory.h>的一部分,这个头文件主要负责C++的动态内存管理。C++的动态内存管理是通过new/delete实现,这其实在使用的时候很麻烦。所谓智能指针其实是一些模板类,它们负责自动管理一个指针的内存,免去了手动new/delete的麻烦。侯捷在他的教程中提到:C++中一个class type的对象可能有两种特殊的情况:像一个指针(pointer-like class,迭代器、智能指针),或者像一个类(仿函数)。为什么要做一个“像指针”的类?因为可能语言的设计者觉得,承接自C

2021-11-01 22:54:45 4145 1

原创 【分布式】异地多活

  异地多活作为一种分布式系统架构,核心目的是维护系统的的高可用性。提高容灾,那一定涉及到冗余。两地三中心两地:本地 + 异地三中心:本地主数据中心 + 本地数据备份中心 + 异地数据备份中心数据中心间三种备份方式,前两种统称为主备模式(Active-Standby):热备:服务器A1作为主服务器承担业务,服务器A2作为备份服务器,实时从A1中获取数据保持数据一致。一旦A1熄火,A2立即接手保持服务正常不间断运行。由于时刻有一个A2空转作为备份,因此开销巨大。冷备:依旧只有A1承担业务,只不过

2021-11-01 14:20:49 713

原创 【分布式】并行计算概览

(本文为新竹清华大学《并行计算与并行编程》课程笔记 )  关于分布式系统和并行计算,其实没有必要非得区分个一二来。当然它们各有侧重,分布式系统是基于网络的一种软件,而并行计算更像是一种概念,这个概念可以在硬件中出现,也可以在软件中出现。再比如分布式系统更偏向于管理一组计算机,而并行计算关注的是每一个计算节点即一个处理器、一个core。因此,一个CPU或GPU芯片也是并行计算施展的领域。  在这门课程里,并行计算其实是在硬件、系统、编程模型和编程语言四个不同的层次上讨论的。  它们的应用场景也很类似:如

2021-10-28 18:20:26 1548 3

原创 【网络】加密算法

对称加密  对称加密是早期的加密算法。多方维护同一份秘钥K,A将报文T用K加密得到加密信息K(T),B获得K(T),通过秘钥T解密得到原报文T。  对称加密最大的隐患在于秘钥的分发不方便,如果没有安全的渠道,一旦秘钥被窃听,加密机制就作废了。非对称加密Part 1 工作原理  A和B各自维护一对公私钥,<A_PUB_KEY,A_PRI_KEY>和<B_PUB_KEY,B_PRI_KEY>,公钥可以直接广播出去让所有人看到,而私钥自己留存。  加密过程也十分简单:A意图向

2021-10-28 13:40:57 2489

原创 【服务器】SEDA

SEDA: An Architecture for Well-Conditioned, Scalable Internet ServicesAbstract​ Staged Event-Driven Architecture(SEDA)是一种新的高并发Internet服务设计,旨在支持大量并发需求,并简化条件良好的服务的构造。在SEDA中,应用程序由显式队列连接的事件驱动阶段(event-driven stage)网络组成。​ SEDA利用一组动态资源控制器(dynamic resource co

2021-10-21 18:53:27 579

原创 【C/C++】从初始化到类型

  在 C++中,如果没有user-declared,class type会由编译器自动生成的函数有:default ctor、copy ctor、destructor和operator=(本文暂时不考虑move semantics)。当然,这些函数是在实际运行过程中调用到它们的时候再由编译器生成实际的代码再去执行,而非在编译这些class type class时直接生成在类的代码块内。  前三个函数其实很好理解,它们分别负责一个对象的产生和消亡。其中,default ctor的特点是:函数的括号内不接收

2021-10-09 22:22:44 464

原创 【C/C++】assert

clpusplus /assertcppreference /assertPart1 Assertassert旨在捕获程序员的编程错误(例如传入非法参数),而不是用户错误或运行时错误(如返回错误值或在 C++ 中抛出异常),因为它通常在程序退出调试阶段后被禁用。在程序运行时,一旦遇到断言不成立,程序即会报错终止,以方便程序调试。assert是一个function-like marco,那么我们在程序中中调用assert(condition),编译器就会去看assert的宏定义,这个宏定义是在编译时处

2021-10-03 14:32:32 996

原创 【开发环境配置】VScode + gcc + cmake in Windows

主流C++编译器参考文档1参考文档21. Gnu Complier Collection一组编译器套件,并非单独的一个编译器。包含C/C++、Objective-C、Java、Go等语言的编译器,以及这些语言的库(e.g. libstdc++、libgcj)gcc/g++:gcc 和 GCC 是两个不同的东西,gcc 是 GCC 中的 GNU C Complier(C编译器),而 g++ 是 GCC 中的 GNU C++ Complier(C++编译器)。而究其本质,gcc/g++ 不是编译器

2021-10-01 21:29:17 1336

原创 【开发环境配置】WSL2 + vscode + cmake

Step1 安装WSL参考文档1参考文档2管理员身份打开 powershell输入 wsl --install,等待安装安装完毕后在 powershell 中输入wsl --set-default-version 2,更改wsl版本为wsl2在 Microsoft Store 中下载任意一种liunx发行版,我使用的是 ubuntu 18.04,等待下载打开 ubuntu 18.04,在对话框内设置 username 和 password输入lsb_release -a查看当前版本信息输

2021-10-01 16:12:09 1696

原创 计算机的里程碑

第一代:电子管(即真空管)计算机( —50年代后期)l ABC阿塔纳索夫-贝瑞计算机,Atanasoff–Berry Computer,1937,美国爱荷华州立。是世界上第一台电子数字计算设备。不可编程,仅仅设计用于求解线性方程组。l ENIACElectronic电子 Numerical数字 Integrator积分 And Computer,1946,美国宾夕法尼亚。ENIAC是世...

2019-05-05 23:00:19 1222

原创 语言的产生和执行(1)

第0部分:自然语言和形式语言语言的两个方面:语法和语义 Syntax(语法):语法规则包括Token的规则和Structure的规则。 Token(符号):代表某一现实或抽象对象的符号。相当于自然语言中的词汇和标点、数学式中的数字和运算符、化学分子式中的元素名和数字。 Lexical(词法):关于Token的规则——如何创造一个正确的Token。比如C中给标识符命名的规则(可以用小写...

2018-12-14 16:15:04 248

空空如也

空空如也

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

TA关注的人

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