C++继承详解
继承关系综述
继承方式
有三种方式继承 public 继承、protected 继承、private 继承。
三种继承方式不会改变直接派生类对基类中定义的成员的访问控制权限:
直接派生类内部总能访问基类的 public、protected 成员。
间接派生类对基类成员的访问就要取决于中间派生类的继承方式。
public 不改变基类定义的成员的访问权限。
基类定义的 public 和 protected 成员在派生类中不变。
外界可以访问基类的 public 成员。
protected 继承基类定义的成员的访问权限 >= protected 。
即基类中定义的 public 成员变成在直接派生类中变成 protected 成员。
外部无法访问基类的成员。
间接派生类内部可以访问这个成员。
private 继承基类中定义的成员的访问权限 >= private 。
即基类定义的 public 和 protected 成员在派生类变成 private 成员。
外界不能访问基类的成员。
间接派生类内部不可以访问这个成员。
虚函数与抽象类
虚函数是带有vi ...
MySQL入门
常用SQL语法基本语法SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言,包括数据查询、数据插入、数据更新、数据删除、数据库结构创建和修改等功能。
推荐一个SQL模拟器来测试语法
SQL Fiddle - Online SQL Compiler for learning & practice
【大小写敏感性】MySQL 在 9.2.2. 识别符大小写敏感性_MySQL 中文文档 对大小写有如下规定:
关键字、函数名不区分大小写。
列、列的别名、索引、存储子程序和触发器名在任何平台上对大小写不敏感,也不敏感。
数据库名、表名、列名、变量名等在不同操作系统有不同的默认行为,具体如下表所示:
Windows
Linux
数据库名
不区分
区分
表名
不区分
区分
表别名
不区分
区分
变量名
不区分
区分
可以通过数据库系统变量lower_case_tables_name来确定如何在硬盘上保存表命名和数据库名字,值的取值和含义如下:
值
存储
比较
默认系统
备注
0
...
计算机体系结构实验备忘录
计算机体系结构实验备忘录
目的本文件夹用于记录总结进行 RISCV 体系结构实验的一些流程和常见问题,最终目标是实现一个体系结构小白能够独自完成从编译工具准备到最终的 GEM5 全系统模拟,并且利用 simpoint 和 checkpoint 技术提高模拟效率。当然这些内容也可以拓展到不同的指令集的体系结构实验当中,需要读者自己融汇贯通,最后会发现都是大同小异。
主要章节
交叉编译工具
巩固善其事必先利其器,由于我们大多使用的是X86或者arm指令集的计算机设备,如果想要将代码转换为RISCV指令集机器上可以运行的程序,我们需要首先完成交叉编译器工具的准备。
SPEC06 测试软件
体系结构研究中,我们需要一套标准的测试工具来衡量机器的性能,这个机器可以是物理机、也可以是虚拟机,也可以是我们的模拟器。SPEC是业内比较通用的一套测试软件,这一章节主要介绍了SPEC06测试软件的构建方法。
GEM5 模拟器
GEM5 模拟器是一个
Linux内核、文件系统构建
GEM5 模拟器的全系统模拟需要我们提供 Linux 内核,和文件镜像。本章节主要描述了如何构建起一个最简单的Lin ...
交叉编译工具
交叉编译工具
巩固善其事必先利其器,由于我们大多使用的是 X86 或者 ARM指令集的计算机设备,如果想要在我们的X86\ARM机器上将代码转换为 RISCV 指令集机器上可以运行的程序,我们需要首先完成交叉编译器工具的准备。
1. 章节目标在体系结构研究中常用的测试套件SPEC的的各个测试程序是由 C、C++ 和 FORTRAN 语言编写的,想要将他们的源代码在我们的 x86 PC 上转换为 RISCV 机器上的可执行程序,就需要交叉编译工具。简单的说我们在这一章节需要完成的任务是获得一套能在你的计算机上生成 RISCV 可执行程序的编译工具链。
2. GNU 工具链介绍我们可以从 newbing 轻松问到下面的内容。对于我们的目标 RISCV 机器,我们需要的是 riscv-gnu-toochain
GNU工具链(英语:GNU toolchain)是一个包含了由GNU计划所产生的各种编程工具的集合,由自由软件基金会负责维护工作。这些工具形成了一条工具链,用于开发应用程序和操作系统。GNU工具链在针对嵌入式系统的Linux内核、BSD及其它软件的开发中起着至关重要的作用。
3. ...
SPEC06 测试软件
SPEC06 测试软件
体系结构研究中,我们需要一套标准的测试工具来衡量机器的性能,这个机器可以是物理机、也可以是虚拟机,也可以是我们的模拟器。SPEC是业内比较通用的一套测试软件,这一章节主要介绍了SPEC06测试软件的构建方法。
1. 章节目标下载安装 SPEC2006 测试软件,学会其使用方法
2. SPEC2006 工具介绍SPEC2006(Standard Performance Evaluation Corporation 2006)是一套广泛使用的基准测试工具,用于评估计算机系统的性能。SPEC是一个非营利性组织,致力于为计算机系统的性能评估提供标准化的基准测试工具。SPEC2006包括多个子测试,分别测量不同方面的性能,如CPU、内存、编译器等。SPEC2006基准测试套件包括两个主要子集:
SPECint2006:用于评估整数运算性能,包含了以整型计算为主的12个应用程序。
SPECfp2006:用于评估浮点运算性能,包含了以浮点计算为主的17个应用程序。
3. 安装 SPEC2006 准备测试集解压安装 SPEC CPU2006
123456789# 解压7z ...
Git 子模块命令(git-submodule) - 初始化、更新或检查子模块
Git 子模块命令(git-submodule) - 初始化、更新或检查子模块描述git-submodule - 初始化、更新或检查子模块
概要 git submodule [—quiet] [—cached] git submodule [—quiet] add [] [—] [] git submodule [—quiet] status [—cached] [—recursive] [—] […] git submodule [—quiet] init [—] […] git submodule [—quiet] deinit [-f | —force] (—all| [—] …) git submodule [—quiet] update [] [—] […] git submodule [—quiet] set-branch [] [—] git submodule [—quiet] set-url [—] git submodule [—qu ...
Git 模块配置文件(gitmodules) - 定义子模块属性
Git 模块配置文件(gitmodules) - 定义子模块属性名称gitmodules - 定义子模块属性
概要$GIT_WORK_DIR/.gitmodules 文件,作用是定义子模块的属性
描述.gitmodules 文件位于 Git 工作树的顶层目录中,是一个文本文件,其语法符合 git-config(1) 的要求。
该文件包含每个子模块的一个子节,子节值为子模块的名称。名称设置为添加子模块的路径,除非使用 git submodule add 命令的 --name 选项进行了自定义。每个子模块部分还包含以下必需键:
submodule.<name>.path:定义子模块相对于 Git 工作树顶层目录的路径,在该路径下子模块预计将被检出。路径名不能以 / 结尾。.gitmodules 文件中所有子模块路径必须是唯一的。
submodule.<name>.url:定义从中克隆子模块仓库的 URL。这可以是一个绝对 URL,可以直接传递给 git-clone(1),或者(如果以 ./ 或 ../ 开头)是相对于父项目源仓库的位置。
此外,还有一些可选键 ...
Git 子模块(gitsubmodules) - 将一个仓库嵌套到另一个仓库中
Git 子模块(gitsubmodules) - 将一个仓库嵌套到另一个仓库中名称gitsubmodules - 将一个仓库嵌套到另一个仓库中
概要
.gitmodules,$GIT_DIR/config
git submodule
git <command> --recurse-submodules
描述子模块是嵌套在另一个仓库中的仓库。子模块有自己的历史记录;嵌套它的仓库被称为父项目。
在文件系统上,子模块通常(但不总是 - 参见下文的形式)包括
位于其父项目的 $GIT_DIR/modules/ 目录下的 Git 目录
父项目的工作目录内的一个工作目录,以及指向 1 的子模块工作目录根目录下的 .git 文件。
假设子模块在 $GIT_DIR/modules/foo/ 具有 Git 目录,工作目录位于 path/to/bar/,则父项目通过树中的 path/to/bar 处的 gitlink 条目和其 .gitmodules 文件中的条目(参见 gitmodules(5))跟踪子模块,形式为 submodule.foo.path = path/to/bar。 ...