Hanerson 的学术车辙

观察 · 描述 · 记录

本文是题目导向的,立足于期末考试可能会出现的题目,并且对于提到的相关概念做了一个简单整理

运行时存储结构 (Runtime Storage Organization)

程序的运行时内存通常划分为三个主要区域,分别存放不同生命周期的数据:

  • 代码区 (Code Segment):存放编译后的机器指令(如 mainsub 函数的代码)。由于大小在编译时已知,属于静态区域。
  • 静态数据区 (Static Data Segment):存放编译时大小已知的数据对象。
    • 包括:全局变量(如 $int$ $m=10$)、全局常量、编译器产生的辅助数据。
    • 生命周期:贯穿整个程序运行过程。
  • 动态数据区 (Dynamic Data Segment):存放运行时动态产生的数据,分为栈区堆区
    • 栈区 (Stack):存放活动记录 (Activation Record),即函数调用的栈帧。遵循后进先出(LIFO)原则。由 BP (栈底指针) 和 SP (栈顶指针) 管理。
    • 堆区 (Heap):存放生命周期不确定的数据(如 malloc/new 申请的对象),由程序员手动释放或由垃圾回收器管理。
阅读全文 »

基于数组模拟堆实现的堆排序

数组模拟堆的下标变换(1-based)

在使用数组模拟堆时,通常采用 1-based 索引(即数组下标从 1 开始),这样可以简化父子节点的下标计算:

操作 下标变换公式
父节点下标 parent = i / 2
左孩子下标 left = 2 * i
右孩子下标 right = 2 * i + 1

注意:Java 数组默认是 0-based,因此实际实现时,通常会在数组头部留一个空位(heap[0] 不使用),或者使用 heap.length - 1 作为有效堆大小,并在计算时进行偏移。

阅读全文 »

2026高级算法复习核心总结

1. 算法复杂度与最优性

概念 含义 举例
最坏复杂度 算法在所有可能输入中所需的最大时间/空间 快排最坏 $O(n^2)$(每次选到最差 pivot)
平均复杂度 算法在所有可能输入上的期望时间/空间 快排平均 $O(n\log n)$
最优性 某算法的复杂度达到该问题的下界,无法再改进 比较排序下界 $\Omega(n\log n)$,归并排序达到该下界 → 最优
阅读全文 »

前言:本文是高度定向化的,仅用于南京大学2026年春季学期的课程《中国近现代史纲要》期末考试使用,不可用做一般近现代史课程的重点复习

进入近代之后中华民族的磨难与抗争

近代中国的社会主要矛盾和两大历史任务

占有支配地位的两大社会矛盾

  • 帝国主义和中华民族的矛盾
  • 封建主义和人民大众的矛盾

历史任务

  • 推翻帝国主义、封建主义联合统治的半殖民地半封建的社会制度,争取民族独立和人民解放
  • 改变中国经济技术落后的面貌,实现国家富强和人民幸福
阅读全文 »

本文部分内容由AI辅助整理

中间表示(IR)

什么是IR

  • 定义:编译器前端与后端之间使用的、与具体源语言和目标机器都相对独立的程序表示形式。
  • 作用:承载程序语义、驱动优化,并作为目标语言生成的基础。

IR的层次分类

类型 抽象程度 代表 优点 缺点
高层IR AST、语法树 便于高层语义优化(内联、异常处理) 距机器远,难以做寄存器分配
中层IR 三地址码(TAC)、四元式、SSA 权衡了可分析性与机器接近度 常见于编译器核心
低层IR 显式寄存器/栈操作 易映射到目标指令 优化空间受限
阅读全文 »

可以点击这里使用名词解释小工具

一、基础语法与形式语言

  • LHS / Left-Hand Side:产生式左侧,通常为单个非终结符
  • RHS / Right-Hand Side:产生式右侧,由终结符与非终结符组成的序列
阅读全文 »

点击–>这里<–查看原始笔记参考

本文使用例题加上知识点复习的方式对于南京大学编译原理课程做一个简单的复习

正则表达式以及 NFA & DFA

正则语法符号(最常用)

符号 含义 示例 匹配结果
* 0次或多次 ab*c "ac", "abc", "abbc"
+ 1次或多次 ab+c "abc", "abbc"
? 0次或1次 ab?c "ac", "abc"
| a|b "a", "b"
阅读全文 »

一行“T.copy”的旅行——从python到GPU指令,中间到底发生了什么?

GPU 存储金字塔

类比:桌面/书架/同一个房间/仓库/下楼走一趟

阅读全文 »