无题
Java习题:Java中子类和父类相关方法的执行顺序1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public class ExeSeqTest { public static void main(String[] args) { System.out.println(new B().getValue()); } static class A { protected int value; public A(int v){ setValue(v); } public void setValue(int value){ this.value = value; } public ...
无题
职工管理系统1234567891011121314151617181920212223242526272829// Worker.h#ifndef ZHIGONG_WORKER_H#define ZHIGONG_WORKER_H#include <iostream>#include <string>using namespace std;class Worker {public: // 职工编号 int id; // 职工姓名 string name; // 部门编号 int deptId;public: Worker(int id, string name, int deptId) : id(id), name(name), deptId(deptId) {}public: // 获取个人信息 virtual void showInfo() = 0; virtual string getDeptName() = 0;};#endif
1234567891011 ...
无题
通讯录管理系统(C++)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354// Person.h#ifndef TEST_PERSON_H#define TEST_PERSON_H#include <iostream>#include <string>#include <vector>using namespace std;class Person { string name; int age; string phone; string address;public: Person() {} Person(const string &name="", int age=-1, const string &phone="", const string &address=" ...
无题
C++变量的引用是否占用内存空间?12int a = 10;int &b = a;
根据引用的定义,b作为a的别名,不单独占用内存空间。如果取b和a的地址,会发现它们是相同的。
但是程序是怎么知道b是指向a的呢?如果b是个指针,程序将开辟一块内存空间,存储“b指向a”这个信息。如果没有一块内存空间来存储“b指向a”这一事实,程序读到b时应该不知所措,怎么能顺利知道b时a的别名呢?
实际上,b在内存上是占用了一块内存空间的。不过编译器对它进行了一些处理,使得程序认为它不单独占用内存空间,且取其地址时直接取到所指向的地址。实际在内存空间上,引用本身也占用一块内存,里面存储着所引用的变量的地址,大小与指针相同,字面上也表现为unsigned long int类型。只是经过编译器处理后,访问这块内存时将直接转而访问其指向的内存。因此在程序中无法读取这块内存本身。
这可以理解为“编译器的把戏”或“程序的谎言”,但这一机制不是为了捉弄程序员,而是为了真正实现别名的效果。
综上:引用的实现实际上是占用内存空间的,但程序把它按照不占用内存空间来处理。
在不同编译器中,引用的实现方式可能有不同 ...
无题
C++:引用的简单理解一、什么是引用?1、引用的概念
引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价。
语法:类型 &引用名 = 目标变量名;
2、&不是求地址运算符,而是起标志作用
3、引用的类型必须和其所绑定的变量的类型相同12345678#include <iostream>using namespace std;int main() { double a = 10.3; // 错误,引用的类型必须和其所绑定的变量的类型相同 int &b = a; cout<<b<<endl;}
4、声明引用的同时必须对其初始化,否则系统会报错1234567#include <iostream>using namespace std;int main() { // 错误!声明引用的同时必须对其初始化 int &a; return 0;}
5、引用相当于变量或对 ...
无题
MIT6.S081:Lec06 Isolation & system call entry/exit(Robert)6.1 Trap机制今天我想讨论一下,程序运行是完成用户空间和内核空间的切换。每当
程序执行系统调用
程序出现了类似page fault、运算时除以0的错误
一个设备触发了中断使得当前程序运行需要响应内核设备驱动
都会发生这样的切换。
这里用户空间和内核空间的切换通常被称为trap,而trap涉及了许多小心的设计和重要的细节,这些细节对于实现安全隔离和性能来说非常重要。因为很多应用程序,要么因为系统调用,要么因为page fault,都会频繁的切换到内核中。所以,trap机制要尽可能的简单,这一点非常重要。
初始的场景你们已经非常熟悉了。我们有一些用户程序,例如Shell,它运行在用户空间,同时我们还有内核空间。Shell可能会执行系统调用,将程序运行切换到内核。比如XV6启动之后Shell输出到一些提示信息,就是通过执行write系统调用来输出的。这是Shell尝试执行write系统调用的一个例子。
我们需要清楚如何让程序的运行,从只拥有u ...
无题
1047. 删除字符串中的所有相邻重复项力扣题目链接(opens new window)
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:”abbaca”
输出:”ca”
解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。
提示:
1 <= S.length <= 20000
S 仅由小写英文字母组成。
1234567891011func removeDuplicates(str string) string { stack := []byte{} for i := 0; i < len(str); i++ { if len(stack) > 0 && ...
无题
20. 有效的括号力扣题目链接
给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
123456789101112131415161718192021func isValid(str string) bool { strLen := len(str) buf := []byte{} for i := 0; i < strLen; i++ { if str[i] == '(' { buf = append(buf, ')') } el ...
无题
MIT6.S081:Lec05 Calling conventions and stack frames RISC-V(TA)5.1 C程序到汇编程序到转换今天的课程,我们会稍微讨论C语言转换到汇编语言的过程,以及处理器相关的内容。今天的课程更多偏向的是实际应用,或者至少我们的目标是这样的。所以这节课的目标是让你们熟悉RISC-V处理器,汇编语言,以及RISC-V的calling convention。对于page table来说这些内容不太重要,但是对于这周要发布的traps lab来说,这些内容至关重要,因为在这个实验中你们将会频繁用到trapframe(注,XV6中用来实现trap的一个内存page,lecture 6有详细内容)和栈。这些就是今天这节课的主要内容。
我们首先来简单看一下C语言是如何转换成汇编语言的。这部分内容有点像是你们之前学过的6.004或者任意其他计算机架构课程的简单回顾。
通常来说,我们的C语言程序会有一个main函数,假设在这个函数内你执行了一些打印然后退出了。
目前看起来都还不错。但是如果你学过了6.004的话,你应该知道,处理器并 ...
无题
MIT6.S081:Lec04 Page tables(Frans)4.1 课程内容简介今天的主题是虚拟内存(Virtual Memory)。具体来说,我们会介绍页表(Page Tables)。在后面的课程中,我们还会介绍虚拟内存相关的其他内容。
首先,我们会从一些问答开始今天的课程。我想问你们还记得课程6.004和课程6.003中虚拟内存的内容吗?我先来说一下我自己对于虚拟内存或者页表的认知吧。当我还是个学生并第一次听到学到这个词时,我认为它还是很直观简单的。这能有多难呢?无非就是个表单,将虚拟地址和物理地址映射起来,实际可能稍微复杂一点,但是应该不会太难。可是当我开始通过代码管理虚拟内存,我才知道虚拟内存比较棘手,比较有趣,功能也很强大。所以,希望在接下来的几节课和几个实验中,你们也能同样的理解虚拟内存。接下来我会问几个同学你们对于虚拟内存的理解是什么。
学生1:这就是用来存放虚拟内存到物理内存映射关系的。
学生2:这是用来保护硬件设备的。在6.004中介绍的,虚拟地址是12bit,最终会映射到某些16bit的物理地址。
学生3:通过虚拟内存,每个进程都可以有独立的地址空间。通过 ...