14、C++内存分区?
C/C++编译的程序占用的内存分为以下几个部分:
栈区:由编译器自动分配释放,存放局部变量、函数参数、返回数据、返回地址等;
堆区:由程序员分配释放,若程序员不释放,程序结束时由系统回收;
全局区(静态区):存放全局变量,静态数据、常量;
文字常量区:常量字符串;
程序代码区:存放函数体的二进制代码。
程序在运行时内存分配区域:
从高地址到低地址:
环境变量(Unix/Linux中全局环境变量,命令行参数);
Stack区,存放局部变量、函数参数、返回数据、返回地址等;
Heap区,由程序员分配和释放内存;
Data区,分为bss未初始化数据区和初始化数据区;
Text区,存放代码。
15、C++11新特性?
auto关键字:编译器可以根据初始值自动推导出数据类型;
nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成人以其他的指针类型;而NULL一般被宏定义为0,在遇到函数重载时容易出现问题;
智能指针:C++11新增了shared_ptr、weak_ptr等类型的智能指针,用于解决内存管理的问题;
初始化列表:使用初始化列表来对列表初始化;
右值引用:基于右值引用可以实现移动语义和完美转发,消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率;
Atomic原子操作用于多线程资源互斥操作;
新增stl容器array以及tuple。