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内核结构

    1. 系统调用接口(SCI):open,read,write等系统调用

    2. 进程管理(PM):创建进程,删除进程,调度进程等

    3. 内存管理(MM):内存分配,管理等

    4. 虚拟文件系统(VFS):为多种文件系统提供统一的操作接口

    5. 网络协议栈:提供各种网络协议

    6. CPU架构相关代码(Arch):为的是提高移植性

    7. 设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码

  • Linux源码目录

    1. Arch:存放处理器相关代码,下设子目录对应具体的cpu,每个子目录有boot(系统引导),mm(存储管理),以及kernel(系统调用)三个子目录

    2. Include:内核所需的大部分头文件目录,与平台无关的在include/linux子目录下,与平台相关的则放在include相应的子目录中

    3. fs:存放各种文件系统的实现代码

    4. init:init子目录包含核心的初始化代码(非系统引导代码),其中包含两个文件main.c和version.c,可以用来研究核心如何工作

    5. ipc:包含核心进程间的通信代码

    6. kernel:包含内核管理的核心代码。与硬件相关代码放在arch/*/kernel目录下

    7. mm:包含了所有的内存管理代码。与硬件相关的内存管理代码位于arch/*/mm目录下

    8. scripts:包含用于配置核心的脚本文件

    9. lib:包含了核心的库代码,与硬件相关的库代码被放在arch/*/lib/目录下

C++笔记


  • 引用传参是C++的特性,C语言不支持引用传参

  • 但实际在使用时候C语法却可以使用引用传参

  • 要使用C++的多态必须要使用虚函数

  • 必须要使用指针或引用

  • 一个类只有有了虚函数才会有一张虚函数表,多态就是通过这张表实现的

  • 对象间的赋值并不能把虚表从一个类对象赋值给另一个对象(对角访问虚函数并没有通过虚函数表)

posted @ 2016-04-13 18:49  小旋风小王爷  阅读(131)  评论(0编辑  收藏  举报