c/c++
编译
-
目前C/C++编译器最流行的就是gcc与g++
-
安装编译器,在windows下使用gcc与g++是通过安装MinGW实现的
-
MinGW(Minimalist GNU on Windows)安装后可以使用很多GNU(Linux下一个著名的项目)工具,包含了gcc/g++/gdb等工具(MinGW\lib下有标准库;MinGW\include下有头文件)
-
把MinGW文件夹放入C盘根目录
-
命令执行时('gcc'不是内部或外部命令),会在当前目录下查找名为gcc可执行文件,如果查不到就在系统环境变量path记录的路径里寻找gcc可执行文件(1.可以用绝对路径来调用gcc可执行文件;2.把gcc路径写入系统环境变量中),环境变量设置完后要重起windows
-
gcc虽然可以编译C++代码,但是不能进行C++的连接函数库操作,所以针对C++代码一般使用g++编译
-
在cmd下编译时要在当前C/C++文件目录路径下进行
-
Ctrl + B执行上一次的编译命令;Ctrl+Shift+B选择执行哪个命令(C++ Single File编译/C++ Single File - Run运行)
linux源码分析
-
目前的Linux源码会把模块相关的文档说明保存在源码目录的documention的文件夹下,如果待分析的模块没有文档说明,这多少会增加定位关键源码文件的难度,但是不会导致我们找不到我们要分析的源码.
-
Linux内核结构
-
系统调用接口(SCI):open,read,write等系统调用
-
进程管理(PM):创建进程,删除进程,调度进程等
-
内存管理(MM):内存分配,管理等
-
虚拟文件系统(VFS):为多种文件系统提供统一的操作接口
-
网络协议栈:提供各种网络协议
-
CPU架构相关代码(Arch):为的是提高移植性
-
设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码
-
-
Linux源码目录
-
Arch:存放处理器相关代码,下设子目录对应具体的cpu,每个子目录有boot(系统引导),mm(存储管理),以及kernel(系统调用)三个子目录
-
Include:内核所需的大部分头文件目录,与平台无关的在include/linux子目录下,与平台相关的则放在include相应的子目录中
-
fs:存放各种文件系统的实现代码
-
init:init子目录包含核心的初始化代码(非系统引导代码),其中包含两个文件main.c和version.c,可以用来研究核心如何工作
-
ipc:包含核心进程间的通信代码
-
kernel:包含内核管理的核心代码。与硬件相关代码放在arch/*/kernel目录下
-
mm:包含了所有的内存管理代码。与硬件相关的内存管理代码位于arch/*/mm目录下
-
scripts:包含用于配置核心的脚本文件
-
lib:包含了核心的库代码,与硬件相关的库代码被放在arch/*/lib/目录下
-
C++笔记
-
引用传参是C++的特性,C语言不支持引用传参
-
但实际在使用时候C语法却可以使用引用传参
-
要使用C++的多态必须要使用虚函数
-
必须要使用指针或引用
-
一个类只有有了虚函数才会有一张虚函数表,多态就是通过这张表实现的
-
对象间的赋值并不能把虚表从一个类对象赋值给另一个对象(对角访问虚函数并没有通过虚函数表)