12 2020 档案
摘要:实验报告 练习2: 实验前的一些探索: 1)对于cpu启动之后做的事情做一个总结: 1.跳转到 FFFFFFF0H到Bios里去 2.Bios自检,并加载bootloader到0x7c00处 3.跳转到0x7c00启动Bootloader, 4.通过Bootloader开启保护模
阅读全文
摘要:练习1:理解通过make生成执行文件的过程。(要求在报告中写出对下述问题的回答) 列出本实验各练习中对应的OS原理的知识点,并说明本实验中的实现部分如何对应和体现了原理中的基本概念和关键知识点。 在此练习中,大家需要通过静态分析代码来了解: 操作系统镜像文件ucore.img是如何一步一步生成的?(
阅读全文
摘要:8.单调栈与单调队列(窗口问题) 若求最小,则维护单调上升,若新的数比维护的单调序列中最大的数还小的数,则清理元素并插入新元素。反之,求最大,则维护下降,若新的数比维护的单调序列中最小的数还大的数,则清理元素并插入新元素。 830.单调栈 给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,
阅读全文
摘要:802.区间和 假定有一个无限长的数轴,数轴上每个坐标上的数都是0。 现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。 接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。 输入格式 第一行包含两个整数n和m。 接下来 n 行,每行包含
阅读全文
摘要:799.最长连续不重复子串 给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。 输入格式 第一行包含整数n。 第二行包含n个整数(均在0~100000范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。 数据范围 1≤n≤
阅读全文
摘要:fork()地址问题** #include<stdio.h> #include<sys/types.h> #include<signal.h> #include<stdlib.h> int main(){ pid_t pid=-1; int a = 0; pid = fork(); if(pid>0
阅读全文
摘要:父进程子进程结束不同步发生的问题:孤儿进程和僵尸进程 当父进程和子进程退出不同步的时候,会发生两种情况 1.父进程先退出,子进程未退出,被领养 此时,子进程将被init初始进程领养。如下面的代码: a.c #include<stdio.h> #include<stdlib.h> #include<f
阅读全文
摘要:父子进程对文件的修改,以及linux文件管理相关 该篇博客写的非常清楚https://blog.csdn.net/Johnsonjjj/article/details/107721363 linux时如何控制文件的? 注意:每个进程打开一个文件都有一个文件表,也就是说,不同的进程的文件指针是不一样的
阅读全文
摘要:5.前缀和类型问题与差分问题 5.1前缀和 796.子矩阵的和 输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含
阅读全文
摘要:前缀和类型问题 796.子矩阵的和 输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接
阅读全文
摘要:4.高精度计算 791. 高精度加法 给定两个正整数,计算它们的和。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,包含所求的和。 数据范围 1≤整数长度≤1000001≤整数长度≤100000 输入样例: 12 23 输出样例 35 #include<iostream> #include
阅读全文
摘要:管道 队列实现 1.1无名管道 在文件IO中创建一个文件或打开一个文件是由open函数来实现的,它不能创建管道文件。只能用pipe函数来创建管道。 int pipe(int fd[2])//unistd.h **功能:**创建管道,为系统调用 **参数:**就是得到的文件描述符。可见有两个文件描述符
阅读全文
摘要:目录IO #include <sys/types.h> 基本系统数据类型 是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。 #include <dirent.h> 是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务
阅读全文
摘要:标准I/O 标准I/O是C库函数,该库通过系统调用完成自己的目标。 文件IO的头文件是unistd.h 标准IO的为 stdio.h 文件IO: 标准IO open(char*, flag, mode) FILE *fopen (const char *path, const char *mode)
阅读全文
摘要:MIT OSEngeering 记录 记录一下下自己撸MIT公开课 使用的linux发行版为ubuntu 环境搭建 本实验环境是在win下搭建,使用的是ubuntu虚拟机 RISC-V工具链: 包括一系列交叉编译的工具,其实就是作用在risc下的编译器,用于把源码编译成机器码,如gcc,binuti
阅读全文
摘要:二分模板 bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: int bsearch_1(int l, int r) { while (l < r) { int mid = l +
阅读全文
摘要:归并排序以及逆序对问题 void merge_sort(int q[], int l, int r) { if(l >= r) return; int mid = l+r>>1; merge_sort(q,l,mid); merge_sort(q,mid+1,r); int tmp[r-l+1]={
阅读全文
摘要:linux系统编程 I/O 以下函数是系统调用函数 包含在头文件unistd.h里 1.open函数 open(char*, flag, mode) 在fcntl.h文件中声明。函数的作用:创建或打开某个文件,参数:最多有三个参数; 第一个参数,char * 包含有文件名和路径 第二个参数:flag
阅读全文
摘要:1.快速排序 模板 1)单向划分 void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l-1 , j = r , x = q[r]; for(int j = l; j < r; j++){ if(q[j]<=x){
阅读全文
摘要:成员变量带指针的string类构建 首先看测试案例: #include "string.h" #include <iostream> using namespace std; int main() { String s1("hello"); String s2("world"); String s3
阅读全文
摘要:项目 1.设计complex(复数类) 需求:1)实部,虚部re,im 2)重写+=符号,调用friend_doapl函数,对两个复数进行相加 其中+=函数调用一个全局函数_doapl(complex*,complext&)进行处理。这里只用完成两个复数的相加 3)重写+符号,这里只用完
阅读全文
摘要:操作符重定义 若不用this,操作符应该定义在类外 #pragma once #ifndef _COMPLEX_ #define _COMPLEX_ class complex; complex& _doapl(complex* ths, const complex& r); class compl
阅读全文
摘要:浅拷贝与深拷贝的坑 以下代码会触发断点invalid address。堆区的数据被free()的时候可能会出的坑。 #include <iostream> #include <cstring> using namespace std; class Solution { public: int id
阅读全文
摘要:在C++中。 通过指针间接修改全局变量直接在编译器阶段就无法通过,因为全局变量在常量区中,收到保护。 而修改局部变量的时候,编译器可以通过,但是在发生修改的时候,编译器会开辟一块新的内存,创建一个新的 *temp赋值给 *p, 而a的值不会发生改动。所有对const常量取地址的操作都是取到了编译器新
阅读全文
摘要:DFS 823.排列 给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤91≤n≤9 输入样例: 3 输出样例: 1 2 3 1 3 2
阅读全文
摘要:使用指针对访存进行优化 假设现在有一个结构体,里面有非常多的成员,现在要对其使用tostring()方法进行打印 struct a { int aaa; //很多成员 }; int main() { struct a xxx = a{ 123 }; tostring(xxx); return 0
阅读全文
摘要:const与指针 1)使指针指向地址的内容无法被修改 struct a { int aaa; }; int main() { struct a xxx = a{ 123 }; const struct a* p = &xxx; //可以输出 cout << p->aaa; //无法通过编译,因为
阅读全文
摘要:野指针的重复释放问题 最近发现了这样一个问题,一个指针释放两次之后,若在中间不置空,会报Invalid address specified to RtlValidateHeap 无效的堆地址 错误。 #include <iostream> #include <string> #include <ma
阅读全文
摘要:指针局部变量赋值的坑 输出结果为空,并非helloworld 其主要原因为:传递指针 后,指针的赋值与传统变量不相同,在函数中,局部变量指针给原指针的赋值很可能出现问题。 #include <iostream> #include <cstring> #include <malloc.h> using
阅读全文
摘要:1.函数局部变量地址释放的坑 main()调用test()方法,返回a的地址,但是a是test()的局部变量,因此在test()调用结束之后,test()的栈空间就被移除,a的储存空间被释放,即使保存了指向a的指针,也无法获得10. 第一次能得到10的原因是编译器优化保留了一次数据。 #includ
阅读全文
摘要:sizeof的trick sizeof运算时的问题 sizeof得到的无符号数,也就是说,任何与它进行运算的数字都为正数,这玩意不能用于判断语句。 #include <iostream> #include <typeinfo> using namespace std; int main(){ //判
阅读全文
摘要:指针定义时候容易发生的错误 定义指针的时候记得将 "*"与指针变量写在一起,不要和 char这种基本数据类型写在一起。 #include <iostream> #include <typeinfo> using namespace std; int main(){ //相当于定义了两个变量 一个是c
阅读全文
浙公网安备 33010602011771号