2023 年度总结

对年度总结的一点想法 这应该是我写年度总结的第三个年头。一开始仅仅是跟风,可现在回看自己曾经写的总结,看到自己这几年的进步和对很多东西看法的转

2023/12/30
articleCard.readMore

OS 学习记 之 XV6

XV6 是 MIT6.S081 操作系统这门课中使用的实验操作系统内核。它的作者之一就是大名鼎鼎的 Robert Morris,世界上第一个蠕虫病毒 Morris 就是出自他之手。XV6 传承了 Unix

2023/8/15
articleCard.readMore

如何编译 GraalVM

下面记录了我如何在 Linux (Ubuntu22.04 LTS) 上编译 GraalVM 的步骤。 1 2 3 4 5 6 7 8 9 10 11 12 mkdir lava # 创建一个工作区 git clone https://github.com/graalvm/mx.git # 下载编译用的工具 git clone https://github.com/graalvm/graal.git # 下载源代码 export PATH=$(pwd)/mx:$PATH # 将 mx 加到

2023/7/27
articleCard.readMore

LLVM 中端优化之 InstCombine

InstCombine 是 LLVM 中的一个窥孔式的优化,为 LLVM 在 canonicalize IR 过程中的一个重要组成部分。这个 Pass 的主要目的就是尽可能地根据数学规则合并优化 IR,同时将 IR 归一化。 代码实

2023/7/18
articleCard.readMore

C++ 中 inline 关键字的语义

C++ 真的是非常地混乱和难学,本文中我会简单谈谈 inline 在 C++ 中的含义和作用。 优化器眼里的 inline 在这一层语境下,inline 是指将在函数调用处将函数体展开,

2023/7/11
articleCard.readMore

链接与库

虚拟内存 我们首先要对平时所说的内存要有一个清楚的认知,那就是我们所谈的实际上都是虚拟内存,不是操纵真实的物理内存。在没有安装操作系统的裸机上

2023/3/3
articleCard.readMore

C++ 移动语义基础

移动语义的作用 直接看一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <iostream> struct S { S() { std::cout << "S()\n"; } S(const S&) { std::cout << "S(const S&)\n"; } ~S() { std::cout << "~S()\n"; } }; S foo() { return S(); } int main() { foo(); } 用以下

2023/2/21
articleCard.readMore

如何优化矩阵相乘

本文中所有的优化策略源自 How To Optimize Gemm,感谢 Prof. Robert van de Geijn 教授及其团队的付出!❤ 我对原有的代码进行了一些改动,并放在了 junaire/HowToOptimizeGEMM 中。 矩阵相乘的定义 假设给

2023/2/16
articleCard.readMore

2022年度总结

对过去的回顾 回看下我一年前年度总结中的对今年的愿景,大多是达到了,这是我比较满意的一方面。在过去的一年中我做的最重要的一件事,可能也是会将改

2022/12/31
articleCard.readMore

CUDA初学笔记

1 2 3 4 5 6 7 8 9 __global__ void Kernel(float* A, int N) { int x = blockIdx.x * blockDim.x + threadIdx.x; if (x < N) A[x] = 1; } int main() { // ... Kernel<<<2,32>>>(A, 64); } 上面是一个简单的 CUDA 例子,其中初始化了一个长度为64的单精度浮

2022/11/22
articleCard.readMore

汇编语言之保护模式

保护模式与实模式 我们这里说的保护模式特指 IA-32 处理器上的32位保护模式。在保护模式下,所有的32位处理器都可以访问最多2^32字节,也就是4GB

2022/11/8
articleCard.readMore

汇编语言之实模式

基础知识 在进入主题前,先总结下关于二进制的一些知识点,我个人认为这非常的令人困惑: 1 bit, 指1位,0或者1 1 byte, 指1个字节,有8位 1 word, 指1个字,有

2022/11/6
articleCard.readMore

浅析 libc++ 中的 string 实现

std::string 也许是 C++ 程序员最常用的标准库数据结构之一了,用了这么久的 std::string,它内部究竟是如何实现的?究竟什么是SSO (Small String Optimiz

2022/8/13
articleCard.readMore

std::expected 基本使用

最近看cppreference的编译器支持的时候发现libstdc++已经实现<expected>了,可惜的是在网上看了一下发现

2022/5/9
articleCard.readMore

C++模板基础

函数模板 先看几个简单的例子了解下函数模板是如何使用的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 template<typename T> T max(T a, T b) { return b < a ? a : b; } max(1,2); // 隐式指定了模板实参

2022/2/27
articleCard.readMore

CSAPP第九章笔记之虚拟内存

虚拟内存 一个系统有很多进程,本质上每个进程都与其它进程共享主存。但是如果直接让每个进程自由访问整个物理内存,将非常危险且麻烦: 一个进程可能有

2022/2/15
articleCard.readMore

CSAPP第八章笔记之异常控制流

异常控制流 硬件层上,硬件检测到的事件会触发控制突然转移到异常控制程序。 操作系统层面上,内核通过上下文切换将控制从一个用户进程转移到另一个用户

2022/1/27
articleCard.readMore

2021年度总结

2021年已经过去2天了,很惭愧现在才想起来写年终总结。一是因为懒,二来也是因为觉得无事可写。但因为今天心情比较低落的的缘故,不由又打开了电

2022/1/2
articleCard.readMore

编译安装GCC12

因为想用C++20标准的原因,所以要求使用GCC12。可是Ubuntu20默认的编译器是GCC9,于是只好自己编译安装一个 GCC trunk。 没想

2022/1/1
articleCard.readMore

如何给LLVM贡献代码

LLVM 简介 LLVM的代码托管在Github,截止到这篇博客 发出时,其Bug tracker 已经从原来的Bugzilla 成功迁移到了Github issue上, 具

2021/12/11
articleCard.readMore

CSAPP第三章笔记Part 2

在前面简单介绍了一些常见的汇编指令,接下来我们谈一下在程序执行中一个非常重要的概念:过程 过程是软件工程中一种重要的抽象。它使得我们可以复用之

2021/10/22
articleCard.readMore

CSAPP第三章笔记Part 1

程序的执行 虽然我们日常使用的编程语言多种多样,但对于计算机来说,其唯一能理解的无非就是二进制,即0和1而已。 CPU的工作流程基本可以看作为控

2021/10/10
articleCard.readMore

GDB基本使用笔记

GDB简介 gdb全称GNU Debugger,是一个支持多语言的调试工具。 使用 编译时启用debug symbol 1 gcc demo.c -g 开启GDB调试 1 gdb ./a.out 调试时加入参数

2021/10/5
articleCard.readMore

读Effetive Modern C++ 之类型推导

概览 C++98 => 一套规则 C++11 => 新加两套,一套用于auto,一套用于decltype C++14 => 拓展了语境 模板推导 1 2 template<typename T> void f(ParamType param) {} 1 f(expr) T推导的结果,不仅与实参e

2021/8/11
articleCard.readMore

给计算机新生的一封信

引子 一转眼又是一年高考结束了,想先给所有学弟学妹们说声:“恭喜!你们终于结束了炼狱般的高三,来到了听起来似乎很美好的大学生活!” 前段时间莫名

2021/7/3
articleCard.readMore

CMake学习笔记

CMake简介 cmake是一个跨平台的构建系统。众所周知,像C++这样的语言构建过程非常痛苦,各个不同的平台使用的工具也各不相同。在Linu

2021/6/19
articleCard.readMore

由Redis学习数据结构--字典

字典的定义 字典,是一种保存键值对(key value pair)的抽象数据结构。 字典中的每一个键都是独一无二的,我们可以通过键查找,更新,删除与之关联的

2021/5/8
articleCard.readMore

C++中lambda表达式基础

语法 完整语法 1 2 3 4 [ capture clause ] (parameters) -> return-type { definition of method } 简化语法 在没有形参的情况下,可以简化为: 1 [] { codes here... } 本质 lambda本质是一个函数对象,可以看作

2021/4/26
articleCard.readMore

由Redis学习数据结构--链表

简介 Redis是一个优秀的非关系型数据库,常常在高性能分布式系统中用于储存缓冲队列。它本身是用C语言写的,其中实现了许多基本数据类型,如安全

2021/4/14
articleCard.readMore

对Python及爬虫行业的思考

前言 最近在帮兄弟大学做一个关于机器学习的项目,其实我做的工作和人工智能半点关系也没有,主要就是用Python做爬虫帮他们爬取一些公开信息。其

2021/4/3
articleCard.readMore

Vim实用技巧

前言 Vim 是一款开源的老牌编辑器,有编辑器之神的美称。但是它复杂的快捷键劝退了很多人,尤其是现在市面上涌现了一大批操作简单,功能强大的IDE。但

2021/3/27
articleCard.readMore

浅谈C++中的类

类的基本思想 数据抽象 封装 接口 实现 类的性质 构造 当一个对象被创造出来,就称之为构造.构造的过程实际上是调用了类定义的构造函数 构造函数不能被声明为

2021/3/20
articleCard.readMore

简要剖析const关键字

const的作用 const关键字保证了我们的变量不会改变,成为常量. 当用在成员函数时,它保证此成员函数不会改变类中的其他成员 const用法 1

2021/3/13
articleCard.readMore

正则表达式基础总结

什么是正则表达式 正则表达式简单来理解就是一个字符串,它可以看作一个规则.通过它我们可以提取一个文本中一些具有相同模式的字符串,或者验证所给字

2021/3/5
articleCard.readMore

使用Hugo和Firebase部署个人博客

Hugo的使用 Hugo号称是世界上最快的构建网站的框架,我们可以简单的编写MarkDown文件,而通过Hugo进行渲染.由此便可以迅速地构建

2021/3/1
articleCard.readMore

浅谈HTTPS证书

HTTPS和SSL/TLS协议 背景 传统的http协议是明文传输的,可能遭到篡改和监控,所以引入了https协议。 原理 HTTPS实际上是&qu

2021/3/1
articleCard.readMore

Linux下使用v2ray

v2ray是一个强大的代理工具,但苦于Linux下一直没有一个好用的客户端,便萌生了直接使用裸v2ray的念头.v2ray本身是不区分服务端

2021/2/28
articleCard.readMore

娱乐至死读书笔记

大纲 先提出媒介的重要性 简要说明文字对我们的重要性 批评电视等现代媒介对我们的影响 “印刷机”对曾经美国成功的影响 “电报”等新媒介的产生逐渐摧毁了

2021/2/28
articleCard.readMore

自控力读书笔记

意志力简述 什么是意志力 我想要 我不要 我要做 “我要做”和“我不要”是自控力的两种表现,但他们不是意志力的全部,我们还有第三种力量,那就是牢记自己

2021/2/28
articleCard.readMore

少有人走的路力读书笔记

自律 人生苦难重重。这是个伟大的真理,它的伟大之处在于,一旦我们领悟了这句话的真谛,就能从苦难中解脱出来,实现人生的超越。遗憾的是,大多数人都

2021/2/28
articleCard.readMore

Postfix & Dovecot 自建邮箱服务

本文中example.com hostname password请修改为自己的配置 环境 系统CentOS 7 postfix dovecot mariadb opendkim nginx 安装必备软件 1 2 3 4 yum -y update && \ yum -y install epel-release && \ yum

2021/2/28
articleCard.readMore

Linux用户管理

UID与GID Linux 并不认识用户名,当我们登陆Linux系统时,系统会依据/etc/passwd和/etc/group中的内容找到用户的UID和

2021/2/28
articleCard.readMore

Linux常用命令总结

本文使用Cent OS 7 编译安装 1 2 3 ./configure make make install rpm使用 1 2 3 4 5 rpm -i xxx.rpm //安装 rpm -e xxx.rpm //卸载 rpm -qa | grep "xxx" //查询xxx rpm -v //显示执行信息 rpm -U xxx.rpm

2021/2/28
articleCard.readMore

Linux开机流程

Linux开机流程 综述 1.载入BIOS或者UFEI,进行硬件检测 2.载入硬盘第一个扇区(MBR),读取其中的Boot Loader,载入内核,

2021/2/28
articleCard.readMore

Git学习笔记

本文历经几次修改,主要是我对Git的一些学习和理解。其内容主要参考Pro Git。 在经过几次重写后,我决定以问答和解释相结合的形式来总结与Gi

2021/2/28
articleCard.readMore

Linux文件与目录

文件 d目录 -文件 l链接文件 文件的基本权限 r 读权限,数字为4 w写权限,数字为2 x执行权限,数字为1 目录只有具备x权限时才能进入 文件的隐藏权限 c

2021/2/28
articleCard.readMore

Linux硬盘管理

新增硬盘基本步骤 创建磁盘分区 格式化分区,创建文件系统 挂载到某一目录下 磁盘分区 在Linux中一切皆文件,包括硬盘和分区,他们都位于/dev目录

2021/2/28
articleCard.readMore

Linux服务浅谈

systemctl相关命令 1 2 3 4 5 systemctl start daemon //启动一个服务 systemctl stop daemon //停止一个服务 systemctl enable daemon //开机自启动 systemctl disable daemon //取消开机自启动 systemctl restart daemon //重新启

2021/2/28
articleCard.readMore

About Me

Hi, 我是章俊,现在是一名普通的大学生。欢迎来到我的博客,这里主要是记录我在学习计算机以及编程中所学到的一些知识。由于本人的知识比较浅薄,学习也

2001/1/1
articleCard.readMore