malloc申请空间的值是随机初始化的,calloc申请的空间的值是初始化为0.realloc给动态的空间分配额外的空间,用于扩充容量。
重载实现编译时多态,虚函数实现运行时多态。
结构体内存对齐,结构体成员按照声明顺序存储,未特殊说明时,按结构体中size最大成员对齐。
指针和引用的区别:
指针是一个变量,存储地址,引用和原来的变量实质上是一个东西,是原来变量的别名。
引用本质是一个指针,同样会占用4个字节内存。引用在声明时必须初始化为另一变量;指针的声明和定义是可以分开定义的。引用一旦初始化之后就不可以在改变;指针变量是可以重新指向别的变量。不存在指向空值的引用,必须有具体实体;但存在指向空值的指针。
在传递函数参数时,什么时候用指针,什么时候用引用?
需要返回函数内局部变量的内存是用指针。
对栈空间比较敏感时使用引用,引用传递不需要创建临时变量,开销小。
堆,系统中会有一个记录空闲内存地址的链表,当系统收到程序申请时,遍历链表寻找第一个大于申请空间的堆节点。堆是不连续的内存区域;栈是一块连续的内存区域,大小由系统预定好了。
堆,频繁得使用new/delete会造成大量碎片,使程序效率低;栈,结构上是先进后出的栈,进去一一对应,不会产生碎片。
64位的编译环境指针为8个字节,32位的编译环境为4个字节。
define 在编译的预处理阶段起作用,const是在编译、运行的时候起作用。
const常量在定义时必须初始化,之后无法更改。
c++中调用C函数
野指针:指针变量未及时初始化 =====》定义指针变量要及时初始化,要么置空。
悬空指针:指针free或者delete之后没有及时置空 ====》释放后立即置空。
重写和重载的区别:
重写是父类和子类之间的垂直关系,重载是不同函数之间的水平关系。
重写要求参数列表相同,重载则要求参数列表不同,返回值不要求。
inline内联函数:
使用宏定义的地方都可以使用inline函数。
作为类成员接口函数来读写类的私有成员或者保护成员,提高效率。
判断代码大小端存储?
大端存储:字数据的高地址存储在 低地址中
小端存储:字数据的低地址存储在低地址中。
C++中的异常处理方式:
static的用法和作用?
静态存储区存储两种变量:1、全局变量2、static变量。在静态存储区存储的数据默认初始值都是0.因为在静态数据区中,内存中所有的字节默认值都是0x00.
static作用:1、隐藏。所有未加static前缀的全局变量和函数都具有全局可见性。
2、保持变量内容的持久。存储在静态数据区的变量在程序刚开始运行时就完成初始化,而且也是唯一一次初始化。
内存对齐:
1、分配内存的顺序是按照声明的顺序。
2、每个变量相对于起始位置的偏移量必须是该变量类型大小的整数倍,
3、整个结构体的大小必须是里面变量类型最大值的整数倍。