CMS网站建设优势,营销型企业网站源码,门户网站如何推广,网站建设公司调研汇报pptC内存管理 C中#xff0c;内存分成5个区。 栈#xff1a;函数内局部变量#xff1b;自动管理#xff0c;效率高#xff0c;但空间较小#xff1b; 堆#xff1a;new分配的内存块#xff1b;手动管理#xff0c;效率低#xff0c;但空间大#xff1b; 自由存储区内存管理 C中内存分成5个区。 栈函数内局部变量自动管理效率高但空间较小 堆new分配的内存块手动管理效率低但空间大 自由存储区malloc分配的内存块 静态/全局存储区全局变量、静态变量 常量存储区常量。 
new / delete 和 malloc / free 
本质上new和delete是操作符malloc和free是库函数实现上malloc将堆的特定段空间申请出来new(1)调用operator newC的全局函数(2)运行相应的构造函数以构造数据类型并为其传入初值3对象构造完成后返回一个指向该数据类型的指针。对应的delete也要先运行析构函数再释放空间内存上malloc申请的空间在堆上new申请的空间在自由存储区有些编译器new在底层的写法就是采用malloc来实现所以也有一些说法说new申请的空间也在堆上这也说明自由存储区可以在堆上但不等同于堆。分配失败new抛出异常malloc返回NULL返回值类型new不需要类型转换malloc是void*需要类型转换 其它new可以重载malloc不能new不支持已分配内存的扩张malloc支持。 
static 修饰变量 
放在静态存储区修饰全局变量不能被其它文件所用其它文件中可以定义相同名字的变量不会发生冲突修饰局部变量局部变量每次的值保持到下一次函数调用修饰类的成员变量该变量与类绑定而不再与实例绑定所有该类的实例包含子类的实例公用该变量 修饰函数 
修饰一般函数静态函数不能被其它文件所用其它文件中可以定义相同名字的函数不会发生冲突修饰类的成员函数 
普通的成员函数一般都隐含了一个this指针this指针指向类的对象本身因为普通成员函数总是具体的属于某个类的具体对象的。静态成员函数不具有this指针所以也无法访问属于类对象的非静态数据或函数只能访问其它静态成员变量和函数static成员函数不能被virtual修饰。 
const 
修饰一般变量变量不可变存储在常量区修饰指针指针指向的内容不可变修饰类的成员变量成员常量不能修改它只能在初始化列表中赋值修饰成员函数实质上修饰的是成员函数影藏得this指针表示该成员函数不能对类的成员变量做修改。和define区别 extern 
修饰当前文件的全局变量使得该全局变量在定义点之前就能被引用使其作用域提前修饰其它文件的全局变量想引用另外一个源文件中已经定义的外部变量。 
多态和虚函数 C通过虚函数实现。只要含有虚函数的类就会为该类生成一个全局唯一虚函数表虚函数表中记录类中虚函数的入口地址同时会在每个实例内存的开始生成一个虚函数表指针指向虚函数表。 而当一个子类继承一个有虚函数的父类后同时也会继承父类的虚函数表如果子类重写了一个虚函数就会把虚函数表中该虚函数的地址改成重写后的版本。 这样一个父类指针指向一个子类对象想要调用某虚函数时通过对象内存地址找到的是子类虚函数表就可以调用子类的版本。这就实现了多态即一个父类指针指向不同对象调用相同的函数表现出不同的形态。 
struct和union 
struct成员占用的内存空间独立大小是累加的union所有的成员共用一块地址空间。 
引用和指针 
引用变量的别名指针一个变量存放地址。 
野指针 指针变量没有被初始化 指针被free或者delete之后没有置为NULL让人误以为p是个合法的指针 指针操作超越了变量的作用域范围。 
构造函数和析构函数