Alex Li的学习笔记

image-20251207114642868

才发现是CSAPP的实验,网上很多教程
推荐:https://zhuanlan.zhihu.com/p/79058089

但是网上的教程和北航的实验有一点点差别,Cache大小从1KB变成了512B。

Part1 Cache模拟器实现

题目

在本节中,我们将完成一个Cache模拟器,它通过读取memory trace(内存访问记录文件),模拟访问内存的过程,并且给出每条访问记录在Cache中的命中/缺失情况。本实验只需要补全csim.c文件中的内容,提交评测也只需提交该文件。

题目描述

我们要求实现的Cache模拟器需要满足的功能详情描述如下。

1、读入文件(memory trace)格式

我们实现的Cache模拟器将从文本文件中逐行读取内存访问记录,每一条记录代表了一次内存相关操作。为了评测方便,内存访问记录的格式与valgrind(一个强大的程序内存检测工具,后文会有介绍)的输出格式相同,具体格式如下:

[space]<operation> <address>,<size>
  • <operation>表示操作类型,共分为4类

    • I 表示取指
    • L 表示取数(Load)
    • S 表示存数(Store)
    • M 表示修改(可以视为先Load后Store)
  • [space]为空格,当<operation>为除I类型之外的类型时,会在行首保留一个空格(这一安排是为了与valgrind的格式保持一致)。
  • <address>16进制数,表示一个64位地址(注意地址大小可能会超过32位)
  • <size>为10进制数,表示存/取的内存大小(单位:字节)

阅读全文


再也不想上机的时候手写堆了。

万能头:

#include <bits/stdc++.h>

vector 变长数组

动态数组,可以变长。

头文件:

#include <vector>

初始化

// 一维
vector<int> a; // <>里面写数据类型
vector<int> v(n); // 指定长度为n,初始值均为0
vector<int> v(n, 114514); // 指定长度为n、初始值都是n-1
vector<int> a{1,2,3,4,5}; // 初始化,数组长度为5
// 拷贝初始化
vector<int> a(n, 1);
vector<int> b(a); // b也是长度为n、初始值为1的数组
vector<int> c = a; // 另一种拷贝初始化方法

// 二维
vector<int> v[5]; // 第一维固定长度5,第二位可变长
vector<vector<int>> v; // 二维长度均可变,可以直接push_back进去一个数组
vector<vector<int>> a(n, vector<int>(n, 0)); // 行列均长度n且初始值为0

阅读全文


A Yuki 的连通块

题目描述

Yuki 有一个无向图,这个无向图有 $n$ 个点和 $m$ 条边,Yuki 希望知道这个无向图有多少个不同的连通块?

两个连通块不同,当且仅当两连通块的点集不同。

输入

第一行包含两个正整数 $n$ 和 $m$($1 \le n, m \le 10^6$),分别表示无向图的点数和边数。
接下来 $m$ 行,每行包含两个整数 $u$ 和 $v$($1 \le u, v \le n$),表示编号为 $u$ 和 $v$ 的点之间有一条无向边。

输出

输出一行,表示该无向图的连通块数量。

输入样例

6 3
1 2
2 3
4 5

输出样例

3

阅读全文


猜猜是什么原因导致我现在刚准备睡()

实验要求:

使用logism自主搭建出一个支持所给指令集的32位CPU,并通过课下正确性测试。

  • 指令集:lw,sw,addu,subu,ori,j,beq。
  • 内存大小:32字。只需要一个RAM。
  • ROM大小:要求能执行32条指令。ROM不一定需要地址的全部位数。只需要一个ROM。
  • PC需要复位功能,起始地址为0x00003000。

我的CPU: https://github.com/lixu10/Logisim_SingleClock_CPU

搭建过程

一头雾水,根本不会搭啊。幸亏有学长的教程:一本书教你通关计组实验 - Kamonto's Little Planet ,简直是神!

然而搭完之后提交得到了WA的结果,经过一天多的Debug,终于解决了所有问题。

阅读全文


Question 1: Package

在每个文件里加上对应的配package和import语句即可。(代码修改可见附录)

// Main.java 前加入
import com.oo.cc.C;

// A.java 前加入
package com.oo.aa;

//B.java 前加入
package com.oo.bb;
import com.oo.aa.A;

//C.java 前加入
package com.oo.cc;
import com.oo.bb.B;

//BTest.java 前加入
package test;
import com.oo.bb.B;

阅读全文