C++常见面试题 | Day4

 

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。

上一篇:牛客java专项练习-day4


下一篇:程序员的每一天(Day4)