avatar
文章
129
标签
29
分类
4

首页
归档
分类
关于
阿日哥的向量空间
搜索
首页
归档
分类
关于

阿日哥的向量空间

LLVM IR总览
发表于2022-07-07|计算机|LLVM
LLVM IR(Intermediate Representation)是一种中间语言表示,作为编译器前端和后端的分水岭。LLVM 编译器的前端——Clang 负责产生 IR,而其后端负责消费 IR。 编译器 IR 的设计体现了权衡的计算思维。低级的 IR(即更接近目标代码的 IR)允许编译器更容易地生成针对特定硬件的优化代码,但不利于支持多目标代码的生成。高级的 IR 允许优化器更容易地提取源代码的意图,但不利于编译器根据不同的硬件特性进行代码优化。 LLVM IR 的设计采用common IR和specific IR相结合的方式。common IR旨在不同的后端共享对源程序的相同理解,以将其转换为不同的目标代码。除此之外,也为多个后端之间共享一组与目标无关的优化提供了可能性。specific IR允许不同的后端在不同的较低级别优化目标代码。这样做,既可以支持多目标代码的生成,也兼顾了目标代码的执行效率。 LLVM IR 有如下 3 种等价形式: 内存表示 类llvm::Function、llvm::Instruction等用于表示common IR。 类llvm::Machin ...
LeetCode-7. 整数反转
发表于2022-07-02|计算机|LeetCode
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123输出:321 示例 2: 输入:x = -123输出:-321 示例 3: 输入:x = 120输出:21 示例 4: 输入:x = 0输出:0 提示: -231 <= x <= 231 - 1 思路 先不考虑溢出的情况,基本思路是,只需每次取出x的个位,将其添加到翻转数字的个位上即可。 class Solution {public: int reverse(int x) { int res = 0; while (x != 0) { // 将x的个位添加到result的个位上 res *= 10; res += x % 10; x /= 10; } return r ...
LeetCode-17. 电话号码的字母组合
发表于2022-07-02|计算机|LeetCode
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 img 示例 1: 输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = ""输出:[] 示例 3: 输入:digits = "2"输出:["a","b","c"] 提示: 0 <= digits.length <= 4 digits[i] 是范围 ['2', '9'] 的一个数字。 思路 一道常规的dfs题目。使用Java,StringBuffer类可以很好地插入、删除和构建字符串。 class Solution { public Map<Integer, String[]> charMap; public List<String> ans; public String digits; public List<String& ...
RAID:原理与计算
发表于2022-06-02|计算机|操作系统•计算机组成原理
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或减少冗余,或是两者同时提升。 RAID技术使用多个磁盘构建了一个更快、更大、更可靠的磁盘系统。在外部看来,RAID就是一个磁盘,而在内部,RAID所组成的系统则十分复杂,由多个磁盘、内存(包括易失性和非易失性内存)以及一个或多个处理器来管理。 与使用单个磁盘相比,RAID具有以下优点: 性能更好。通过并行使用多个磁盘,可以大大加快IO时间。 可靠性更好。RAID通过某种形式的数据冗余,可以最大程度减轻数据错误的情况。 容量更大。显然,采用多个磁盘使得RAID的容量更大了。 本文我们主要探讨一些主要的RAID技术原理,并通过实际计算加深对RAID的理解。 数据分条 我们想要通过并行访问硬盘来提高数据的访问速度,就必须将数据分散到各个磁盘中。而拆分数据最简单的形式就是数据分条(data st ...
快速掌握CMake「四、关键概念」
发表于2022-05-27|计算机|CMake
「CMake」是一个跨平台的C++项目管理解决方案,它可以帮助用户方便地管理大型C++项目,支持生成不同平台的Makefile。本系列文章可以帮助你快速掌握CMake,所有内容来源于Mastering Cmake。 本篇文章为该系列的第四篇。我们主要介绍CMake的一些关键概念。 学习CMake的过程中,你可能已经遇到了很多不同的概念,比如目标(targets),生成器(generators)和命令(commands)。理解这些概念可以让你高效地编写CMakeLists文件。许多CMake中的对象比如目标,目录和源文件都拥有属性。属性是一个特定对象所拥有的的键值对。访问属性最通用的方法是通过set_property和get_property命令。这些命令可以让你设置和获取一个CMake对象的属性。你可以查看cmake-properties手册,其中列出了所有支持的属性。在命令行中,你可以运行对CMake命令附加--help-property-list选项来查看所有CMake支持的属性。 目标 CMake中最重要的概念应该是「目标」。目标代表着可执行文件,库,以及由CMake构建的工具 ...
快速掌握CMake「三、CMake缓存」
发表于2022-05-17|计算机|CMake
「CMake」是一个跨平台的C++项目管理解决方案,它可以帮助用户方便地管理大型C++项目,支持生成不同平台的Makefile。本系列文章可以帮助你快速掌握CMake,所有内容来源于Mastering Cmake。 本篇文章为该系列的第三篇。你可以将CMake缓存理解为一个配置文件。当你在项目中第一次运行CMake时,会在build目录的顶层生成CMakeCache.txt文件,CMake使用这个文件来存储一系列全局缓存变量。 缓存文件有几个用途。首先是存储用户的设定,这样当再次运行CMake时,他们就不需要重新输入各种选项。例如,option命令创建一个布尔变量并将其存储在缓存中。 option(USE_JPEG "Do you want to use the jpeg library") 这行代码会创建一个名为USE_JPEG的遍历,并将其放入缓存中。这样,用户就可以在用户界面中设置这个变量,它的值将保留下来,以便用户将来再次运行CMake。要在缓存中创建一个变量,可以使用类似option,find_file命令,或者可以使用标准的set命令,但要加上CACH ...
快速掌握CMake「二、编写CMakeLists文件」
发表于2022-05-14|计算机|CMake
「CMake」是一个跨平台的C++项目管理解决方案,它可以帮助用户方便地管理大型C++项目,支持生成不同平台的Makefile。本系列文章可以帮助你快速掌握CMake,所有内容来源于Mastering Cmake。 本篇文章为该系列的第二篇,我们将讨论如何为你的项目编写一个基本的CMakeLists文件,包括基本的命令和你在项目中可能会遇到的问题。本文还将讨论CMakeLists文件的健壮性和可维护性。 2.1 编辑CMakeLists文件 你可以使用大多数的文本编辑器来编辑CMakeLists文件,比如Notepad++,VS Code等等。它们自带了CMake语法高亮显示和缩进支持。而其他的一些编辑器比如Emacs或者Vim,CMake包含缩进和语法高亮模块,你可以在源码的Auxiliary目录中找到它们,或者从CMake的下载页面下载。 在任何支持的生成器(Makefiles, Visual Studio等)中,如果你编辑了一个CMakeLists文件并使用CMake重新构建,生成器会根据需要自动调用CMake来更新生成的文件(例如Makefiles或项目文件)。这有助于确保生 ...
快速掌握CMake「一、起步」
发表于2022-05-13|计算机|CMake
「CMake」是一个跨平台的C++项目管理解决方案,它可以帮助用户方便地管理大型C++项目,支持生成不同平台的Makefile。本系列文章可以帮助你快速掌握CMake,所有内容来源于Mastering Cmake。 本篇文章为该系列的第一篇。 1.1 安装Cmake 在使用CMake之前,当然你需要在你的操作系统上安装它。在很多操作系统的包管理软件中你基本都能找到CMake的发行版,比如Cygwin,Debian,FreeBSD,Mac的MacPort、HomeBrew等。 如果你的操作系统没有对应的CMake版本,你可以到CMake的下载页面去下载与你的计算机架构相符的Cmake预编译版本。或者你也可以下载CMake的源码自行编译安装,只需要参考源码根目录的Readme.txt文件并按照提示进行编译即可。 1.2 目录结构 CMake在构建一个项目时有两个主要的目录:源码目录和二进制目录。源码目录下存放的是项目的源代码和CMakeLists文件,二进制目录通常命名为build,CMake会将对象文件,库,可执行文件存放其中。CMake不会更改除了build目录以外的任何文件。 源代 ...
LLDB快速入门
发表于2022-05-11|计算机|LLDB
最近准备重拾C++,整理一下LLDB的快速入门Tutorial,内容来源LLDB官网。 1. 命令结构 不同于gdb的自由形式的命令,lldb的命令都是高度结构化的。所有的lldb命令都具有以下形式: <noun> <verb> [-options [option-value]] [argument [argument...]]<名词> <动词> [-选项 [选项值]] [参数 [参数...]] 命令行解析是在命令执行之前完成的,因此所有命令的形式都是统一的。基本命令的命令语法是非常简单的,所有的参数,选项和选项值都用空格隔开,如果你的参数中包含空格,那么请用双引号将参数括起来。如果你的参数中有双引号或者反斜杠,那么请在它们之前加一个反斜杠来转义。 你可以在一条命令的任何地方加入一个选项,但如果参数以“-”开头,那么你需要添加一个选项终止符“--”(option termination),来告诉lldb所有的选项已经指定完毕了。比如,你想启动一个线程,并且给process launch命令指定一个-stop-at-entry选项,同时你 ...
LeetCode 48. 旋转图像
发表于2022-04-10|计算机|LeetCode
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: img 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2: img 输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]] 提示: n == matrix.length == matrix[i].length 1 <= n <= 20 -1000 <= matrix[i][j] <= 1000 思路 我们首先按照标准的坐标系列出上述的例子,向右为轴正向,向上为轴正向。可见,题目的要求是将矩阵沿中心逆时针旋转。 [7,8,9] [9,6,3][4,5,6] ==> [8,5,2][1 ...
1…678…13
avatar
Thomas
一个人的命运,当然要靠自我奋斗,但是也要考虑到历史的行程。
文章
129
标签
29
分类
4
Homepage
最新文章
Notes on PL 16 - De Bruijn, Combinators and Encodings2025-02-14
Notes on PL 15 - Fixed-Point Combinators2025-02-07
Notes on PL 14 - Lambda Calculus Encodings2025-01-31
Notes on PL 13 - Lambda Calculus Continued2025-01-24
Notes on PL 12 - Lambda Calculus2025-01-17
标签
CMake 杂项 数据结构与算法 计算机组成原理 Linux 深度学习 大数据 Programming Language 机器学习系统 操作系统 诗词 机器学习 计算机网路 LLDB 这就是生活 软件工程 编译原理 spring c++ LeetCode 高等数学 组合数学 java LLVM 软件开发 剑指Offer Hadoop 自然语言处理 AcWing算法基础
网站资讯
文章数目 :
129
本站总字数 :
191.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
访客地图
©2019 - 2025 By Thomas
搜索
数据库加载中