C
static的用法:static修饰局部变量时本来局部变量在栈区,加static到静态区修饰局部变量后不会再初始化这个变量,修饰全局变量时不能在其他源文件中访问这个值(否则可以用extern访问其他源文件中的全局变量),static修饰函数时,使得函数不能被其他源文件访问,在C++中,static在类中定义静态数据成员以及静态成员函数,定义静态数据成员的时候这个静态数据成员在类外赋值,不赋值时默认为0,且这个静态数据成员不属于任何对象,是共用的,可以由类名引用,也可以用对象名引用,只占用一份空间,一次改变都会改变,在程序开始时分配空间,即使不定义对象也会分配空间,静态成员函数只能访问静态数据成员,而不能访问非静态数据成员,非静态成员函数有this指针,静态成员函数没有this指针,属于类而非对象
const的用法:C中的const修饰的是只读变量,本质上还是变量,有自己的存储空间。虽然不能通过正常的方法改变变量的值,仍能通过非正常手段改变,c++中的const是一个真正的常量,被放入符号表中,符号表中存放的是一系列的键值对,所以一般情况下,编译器不会为const常量分配空间,但是如果真的对这个常量取地址或extren操作时编译器还会给这块常量分配地址空间
const与define:C++中都可以用来定义常量,const常量是由编译器处理的提供类型检查和作用域检查,宏定义define有预处理器处理是单纯的文本替换,const常量是由编译器处理的传参时也会进行入参检查,
C语言五大内存区:栈:由程序自动分配,运行结束后释放内存,连续的地址空间,局部变量,函数参数
堆:由程序员进行申请和销毁操作,new,malloc,free,delete,
静态全局区:全局变量静态变量,
代码段:存储程序运行的二进制代码,
常量存储区:存储常量
内存分配方式:栈上分配:程序运行时分配,用完释放,生存周期就是当前的作用域,连续的内存空间
堆上分配:动态分配内存,由程序员自己分配和释放,内存空间不连续
静态全局区分配:编译阶段分配,生存空间是整个程序运行的时间
new,delete与malloc,free的区别:
malloc是C语言的函数,new是C++的操作符;malloc返回值是void*,new返回值是响应的类型,new会调用构造函数,malloc不会调用构造函数
多态实现原理:
多态是一个函数接口的不同实现,在基类的函数名称前加virtual关键字,由子类重写这个函数,等到调用函数时会根据对象的类型调用具体的实现,基类调用基类的方法子类调用子类的方法, 实现原理是当有虚函数存在时类会有虚函数表,类创建的对象有自己的虚函数表指针,根据这个指针找到对应的方法,动态绑定,
进程:当一个程序开始执行到结束,他的内存就是一个进程,是系统分配资源的最小单位多进程创建fork(有自己的pid和进程空间),vfork(与父进程共享内存空间),clone,进程间通信,管道,共享内存,信号,消息队列,信号量,套接字
线程:线程是进程的一个实体,CPU调度基本单位限产我给自己不占用资源用他的所在的进程 的资源,