yelvens
码龄7年
求更新 关注
提问 私信
  • 博客:484,375
    问答:3
    484,378
    总访问量
  • 150
    原创
  • 3,106
    粉丝
  • 5
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:陕西省
加入CSDN时间: 2018-06-28

个人简介:我很懒,什么都没留下…

博客简介:

yelvens的博客

博客描述:
编译技术相关的记录~
查看详细资料
个人成就
  • 获得767次点赞
  • 内容获得154次评论
  • 获得2,428次收藏
  • 代码片获得2,897次分享
  • 博客总排名11,243名
  • 原力等级
    原力等级
    5
    原力分
    1,884
    本月获得
    3
创作历程
  • 2篇
    2025年
  • 8篇
    2024年
  • 11篇
    2023年
  • 26篇
    2022年
  • 28篇
    2021年
  • 43篇
    2020年
  • 46篇
    2019年
成就勋章
TA的专栏
  • Java
    28篇
  • C/C++
    13篇
  • Golang
    6篇
  • LLVM
    15篇
  • LuaJIT
    9篇
  • 计算机系统原理
    12篇
  • 计算机体系结构
    11篇
  • 编译原理及技术
    15篇
  • 链接器与调试器
    9篇
  • 工具及使用经验
    12篇
  • 数据结构与算法
    18篇
  • 数据库存储过程
    7篇
创作活动更多

新星杯·14天创作挑战营·第13期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛!注: 1、参赛者可以进入活动群进行交流、互相鼓励与支持(开卷),虚竹哥会分享创作心得和涨粉心得,答疑及活动群请见:https://bbs.csdn.net/topics/619781944 【进活动群,得奖概率会更大,因为有辅导】 2、文章质量分查询:https://www.csdn.net/qc

76人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 收藏
  • 课程
  • 社区
  • 最近

  • 文章

  • 专栏

  • 收藏

  • 课程

  • 社区

搜索 取消

Go Test测试总结

模糊测试的方式,运行 Fuzz 测试,默认情况下不进行模糊测试。指定时,命令行参数必须与主模块中的一个包完全匹配,而正则表达式必须与该包中的一个模糊测试完全匹配 ,模糊测试将在常规测试、基准测试、其他模糊测试的种子语料库和 Example 完成后进行。包用于调用相应的测试函数,接着构建并运行、报告测试结果,最后清理测试中生成的临时文件。:列出所有符合正则表达式的顶层测试,不会运行任何测试。本地目录模式,即直接运行当前目录下的包,即。,测试该目录下的所有包,在该模式下,包列表模式,运行指定包下的测试,
原创
博文更新于 2025.06.24 ·
2214 阅读 ·
1 点赞 ·
2 评论 ·
1 收藏

使用Git常用操作命令

主要参考自链接:https://git-scm.com/docshttps://www.runoob.com/git/git-basic-operations.htmlhttp://marklodato.github.io/visual-git-guide/index-zh-cn.htmlhttps://www.cnblogs.com/miracle77hp/articles/11163532.htmlhttps://www.cnblogs.com/cb0327/p/5066685.htmlht
原创
博文更新于 2025.06.18 ·
2658 阅读 ·
0 点赞 ·
2 评论 ·
1 收藏

Linux常用命令总结

vim编译一个文件vim filename进入到文件的后光标处于上次退出时的位置vim +行号 filename进入文件后光标处于指定行的首位置vim + filename进入文件后光标处于最后一行的首位置
原创
博文更新于 2025.06.09 ·
1904 阅读 ·
1 点赞 ·
1 评论 ·
4 收藏

CSAPP:第六章——存储器层次结构

文章目录一、存储技术1.1 随机访问存储器1.1 随机访问存储器二、局部性三、存储器层次结构四、高速缓存存储器五、编写高速缓存有好的代码六、高速缓存对程序性能的影响如果数据在寄存器中,指令执行期间,访问需要0个始终周期;在高速缓存中,需要4~75个周期;在主存中,需要上百个周期;在磁盘中,大约要几千万个周期。一、存储技术1.1 随机访问存储器随机访问存储器(Random-Access Memory,RAM)分两类:静态(SRAM)和动态(DRAM)。都具有易失性,断电后数据丢失。SRAM比DR
原创
博文更新于 2025.06.07 ·
1993 阅读 ·
4 点赞 ·
0 评论 ·
23 收藏

LuaJIT:MCode memory area

文章摘要:Trace在编译器中经历五个状态(START→RECORD→END→ASM→IDLE),完成从字节码到SSA IR再到机器码的转换。MCode内存区域采用RW^X权限管理,支持多区域4KB分页布局,通过MCLink链表连接。机器指令生成阶段需处理MCode区域上限问题,执行前需提交mcode并设置可执行权限。整个流程涉及IR优化、内存管理及权限控制,确保JIT编译的安全性和高效性。(149字)
原创
博文更新于 2025.06.07 ·
458 阅读 ·
17 点赞 ·
0 评论 ·
6 收藏

LuaJIT:Garbage Collector Algorithms

本篇文章是对MakePall发表wili内容《》的翻译和扩展,因为原文是对LuaJIT2.xGC重要功能的简介和对LuaJIT3.0newGC的工作计划,所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT2.xGC做个总结。到目前(2025-1-17)为止,LuaJIT3.0尚未发布。看Make列的3.0plan,其中优化了很多功能,非常值得期待。但他也说了,3.0有可能永远不会发布,这将是非常遗憾的一件事情。
原创
博文更新于 2025.05.14 ·
985 阅读 ·
10 点赞 ·
0 评论 ·
26 收藏

位运算实战技巧总结

两个负数相加可能会产生负溢出,负溢出结果会变为正数。如果两个数x和y符号相同,符号位异或结果为0;符号不同,符号位异或结果为1。如果一个正数是2的次幂,则这个数的二进制表示中只含有一个1。循环消去,当最后x值为0时,便可以求出二进制中1的个数。会找到第一个大于x的数,且它正好是n的整数倍。则是先对b按位取反,再将结果与a按位与运算。是最高权重,如果x,y的和数据溢出,则和模。运算的二进位结果,相异为1,相同为0。设整数n类型为int_8,值为3,则。成立,n为偶数,否则为奇数。比x,y中的任何一个值都小。
原创
博文更新于 2025.04.21 ·
1071 阅读 ·
1 点赞 ·
0 评论 ·
13 收藏

LuaJIT:Bytecode结构布局

假设现在有两个寄存器PC和INS,PC存放Bytecode的地址,INS存放PC对应地址处的Bytecode值,则可以利用以下伪代码对Bytecode访问,其中。中的汇编代码在预处理阶段变成二进制机器码,然后再使用内存映射将机器码映射到虚拟内存,等运行时便可以直接运行被映射的二进制代码。中查找相应的函数指针,再执行相应的函数。等解释执行的逻辑完成,开始让PC指向下一条Bytecode指令,重复同样的过程。运行时被映射的二进制代码的地址(函数指针),存放在。类型的动态数组中,数组的初始。
原创
博文更新于 2025.04.19 ·
4175 阅读 ·
1 点赞 ·
5 评论 ·
0 收藏

LuaJIT:常量池(constant array)

Lua source中出现的常量依次是131072、262144、1310721、131072,它们均为const number,所以在解析时将131072放在了索引0处,262144放在了索引1处,1310721放在了索引2处,解析到第二个131072时,发现该常量已经出现过且在索引0处,此时只需要将0放在操作数D上即可(中Node结构体,val和上面说过的TValue数组的索引对应,作为常量表slot,key则是常量值或字符串的sid,next存放下一个元素的地址。HashTable节点类型的定义是。
原创
博文更新于 2025.04.19 ·
878 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

LuaJIT:SSA IR介绍

LuaJIT资料挺少,可以一手学习的基本上只有官方文档:http://wiki.luajit.org/SSA-IR-2.0,但是目前这个文档的介绍被作者删了。在文档被删之前,我按照自己的理解,对官网上的部分内容做了记录。等后面我想优化了,再把这一块内容好好优化一些,毕竟写这边文章的时候,我刚接触LuaJIT,对LuaJIT掌握的还
原创
博文更新于 2025.04.19 ·
1428 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

LuaJIT:源码结构梳理

5、Bytecode相关的一些定义和操作,定义bc指令格式,bc的dump、read以及write操作。dispatch是跟Bytecode对应的函数相关的一个结构,也是一个很重要的内容,后续会专门讲解。4、IR汇编器,JIT模式下IR到各种目标机器码的映射(SSA IR -> machine code),如果要支持一个新的架构,这块内容是移植的重点。如果要支持一个新的架构,这块内容也是移植的重点。15、Trace记录器(bytecode -> SSA IR),这块内容还是很重要的,基本都是要掌握的。
原创
博文更新于 2025.04.19 ·
2472 阅读 ·
3 点赞 ·
14 评论 ·
4 收藏

LuaJIT:栈帧布局(stack frames layout)

但是用堆内存代替寄存器和运行时栈在虚拟机层面的访问时效是相同(都是访问内存),所以我们可以效仿没有寄存器文件的龙芯处理器,在LuaJIT虚拟机中去除寄存器这一概念,只保留LuaJIT的运行时栈,LuaJIT也正是这么做的。主调函数调用被调函数之前,会先把被调函数的stack结构布置好,函数对象、参数放入指定位置,并在stack上留下存放PC的空间(这个PC以后再介绍吧,其实就是放函数调用返回后,将要执行的指令的)。,将slot 1中的值和slot 0号中的值相加,结果存放在slot 1号中。
原创
博文更新于 2025.04.19 ·
983 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

LuaJIT:Bytecodes介绍

关于Bytecode介绍的官方文档:[http://wiki.luajit.org/Bytecode-2.0](http://wiki.luajit.org/Bytecode-2.0)但是最近发现作者将Bytecode和SSA IR的介绍的文档删除了,也不知道是为什么。虽然那些文档写的不太详细,除非看它们在LuaJIT中的具体实现代码,否则很难看懂。这篇文章我尽量说详细点,会结合Bytecode在代码中的具体定义,希望对需要的同学有所帮助。在LuaJIT的源码中,关于Bytecode的指令格式的定义
原创
博文更新于 2025.04.19 ·
2238 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

寄存器和运行时栈

文章目录一、寄存器二、运行时栈一、寄存器在LoongArch体系中,有32个通用寄存器,除了0号寄存器始终为0外,其他31个寄存器物理上没有区别。但系统人为添加了一些约定,给了它们特定的名字和使用方式。对以上通用寄存器详细说明:$r0寄存器中存放的值永远是零,且不能改变,这个寄存器的用途主要是方便编码。$r3寄存器存放运行时栈的栈顶地址,会一直变化。通用寄存器有8个用于整型参数传递,寄存器名字依次是$a0~$a7(编号依次是$r4~$r11),$a0和$a1也用于存放返回结果值;浮点寄存器也
原创
博文更新于 2025.04.17 ·
4259 阅读 ·
1 点赞 ·
0 评论 ·
13 收藏

使用GDB(二):调试程序常用命令

一、启动程序run,简写r:运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处start:开始调试,停在第一行代码处二、改变控制流程next,简写n:执行一行源程序代码,此行代码中的函数调用也一并执行,(gdb) n,(gdb) n line-numberstep,简写s:执行一行源程序代码,如果此行代码中有函数调用,则进入该函数,(gdb) s,(gdb) s line-numbercontinue,简写c:继续执行被调试程序,直至下一个断
原创
博文更新于 2025.04.03 ·
5567 阅读 ·
7 点赞 ·
0 评论 ·
32 收藏

CSAPP:第九章——虚拟内存(上)

虚拟内存一、物理和虚拟寻址二、地址空间三、虚拟内存作为缓存的工具四、虚拟内存作为内存管理的工具五、虚拟内存作为内存保护的工具六、地址翻译七、Linux 内存系统八、内存映射九、动态内存分配十、垃圾收集十一、C程序中常见的与内存有关的错误一、物理和虚拟寻址二、地址空间三、虚拟内存作为缓存的工具四、虚拟内存作为内存管理的工具五、虚拟内存作为内存保护的工具六、地址翻译七、Linux 内存系统八、内存映射九、动态内存分配十、垃圾收集十一、C程序中常见的与内存有关的错误...........
原创
博文更新于 2025.02.19 ·
2177 阅读 ·
7 点赞 ·
0 评论 ·
19 收藏

Linux环境下LLVM 6.0 + clang源码编译安装

可以转载,请注明出处!1.准备工作首先确保你的Linux系统是可以联网的,我是win10环境下的VMware 15 + centos 7,这个应该没影响,之所以说,是因为我之前用的vm12,使用centos7老是出问题,换了15之后就好了。安装总共需要三个tar包,将其全部拖入到Linux环境下。其中cfe-6.0.0.src.tar.xz是clang的源码,compiler-rt-6.0.0.src.tar.xz是动态测试工具,llvm-6.0.0.src.tar是llvm的源码,这三个包官网.
原创
博文更新于 2024.11.01 ·
14819 阅读 ·
14 点赞 ·
13 评论 ·
64 收藏

Vim使用(一)——常用技巧及快捷键总结

普通用户的vim配置在。```shellset mouse-=asyntax on "语法高亮set nocompatible "去除VI一致性,必须要添加set nu "显示行号set autowrite "自动保存set ruler "打开状态栏标尺set cursorline "突出显示当前行set smartindent "开
原创
博文更新于 2024.10.30 ·
1689 阅读 ·
1 点赞 ·
0 评论 ·
6 收藏

基于Trace的类型特化动态语言JIT编译

动态语⾔JavaScript、Python 和 Ruby 等语⾔⾮常流⾏,因为它们表达能⼒强、⾮专业⼈⼠也能轻松使⽤,并且部署起来就像分发源⽂件⼀样简单。它们既可⽤于⼩型脚本,也可⽤于复杂的应⽤程序。例如,JavaScript 是客户端 Web 编程的事实标准并⽤于基于浏览器的⽣产⼒应⽤程序(例如 Google Mail、Google Docs 和 Zimbra Collaboration Suite)的应⽤程序逻辑。
原创
博文更新于 2024.07.19 ·
1354 阅读 ·
11 点赞 ·
0 评论 ·
27 收藏

编译器设计(九)——优化简介

代码优化的目标是在编译时发现有关程序运行时行为的信息,并利用该信息来改进编译器生成的代码。改进可能有许多种形式。优化最常见的目标是提高编译后代码的运行速度。但对于某些应用程序来说,编译后代码的长度要比其执行速度更重要。例如,考虑某个将烧录到只读存储器的应用程序,其代码长度会影响整个系统的成本。优化的其他目标包括降低执行的能耗、提高代码对实时事件的响应、降低对内存的总访问量、优化寄存器的使用等。有两个关于优化的比较经典的例子,后面补上。
原创
博文更新于 2024.07.16 ·
7219 阅读 ·
3 点赞 ·
0 评论 ·
25 收藏
加载更多