[TOC]

C++内存模型

1.C/C++内存有哪几种类型

C中,内存分为5个区:堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量)和常量存储区(常量)。此外,C++中有自由存储区(new)一说。

2.C++堆和栈的区别?

1)堆存放动态分配的对象——即那些在程序运行时动态分配的对象,比如 new 出来的对象,其生存期由程序控制;

2)栈用来保存定义在函数内的非static对象,如局部变量,仅在其定义的程序块运行时才存在;

3)静态内存用来保存static对象,类static数据成员以及定义在任何函数外部的变量,static对象在使用之前分配,程序结束时销毁;

4)栈和静态内存的对象由编译器自动创建和销毁。

3.堆和自由存储区的区别?

总的来说,堆是C语言和操作系统的术语,是操作系统维护的一块动态分配内存;自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。他们并不是完全一样。

从技术上来说,堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍后调用free可把内存交还。而自由存储是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区。基本上,所有的C++编译器默认使用堆来实现自由存储,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,这时藉由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。

C++面向对象

1.简述一下C++中的多态实现的原理。

C++语法

1. const关键字的作用

2. C++是否是类型安全的语言?

3. static关键字的用法和作用

4. typedef和define有什么区别

C++指针相关

1.C/C++引用和指针的区别?

2.C++的智能指针的分类?

C++数据结构

1.C++的链表和数组有什么区别?

2.简述C++简述队列和栈的异同

C++性能优化

  1. 什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?你通常采用哪些方法来避免和减少这类错误?