- c++八股
- 对模板的理解
- 模板与继承有什么区别
- 平时用的c++什么版本,新版本特性?
- 函数指针是如何传递参数的,能讲一下吗
- 写代码过程中做过哪些优化?
- C++多态实现
- 父类和子类都有static的变量,创建顺序是怎么样的?
- 空类中具有哪些函数?拷贝构造为什么要采用引用?
堆与栈的区别,程序的分区。
(1)栈中存在基本类型的变量和引用,由编译器自动分配和释放。
(2)堆中存放new创建的对象和数组;由程序员释放,未释放则最后由OS回收。
(3)全局区(静态区):全局变量和静态变量.分为未初始化和初始化区
(4)文字常量区:常量字符串
(5)程序代码区
int a=0; //全局初始化区
char *p1; //全局未初始化区
int main()
{
int b;栈
char s[]="abc"; //栈
char *p2; //栈
char *p3="123456"; //123456\0在常量区,p3在栈上。
static int c=0; //全局(静态)初始化区
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。
strcpy(p1,"123456"); //123456\0放在常量区,编译器可能会将它与p3所向"123456"优化成一个
地方。
}
编译的四个过程
- 预处理:删除注释,展开所有宏定义;处理所有预编译指令#if,#else; 将被包含的头文件插入到代码中
- 编译:语法分析,语法优化,生成汇编代码。静态链接库在此时被加载进来。
- 汇编:生成二进制代码
- 链接: 合并所有目标文件,生成可执行文件。.dll文件在运行时才被加载。
* 内存碎片是怎么产生的?怎么解决内存碎片的问题?
- 如果让你实现一个vector,你会怎么做?
- 红黑树,红黑树插入一个节点后会怎么操作?
- 递归存在哪些问题。递归怎么改为非递归函数?
- BFS和DFS适用哪些场景,能举例说明吗?
- 进程与线程的区别,进程间通信方式,分别适用于哪些场景?
- 怎么加快代码运行速度,说几种
- 手撕代码:leecode 烂橘子的问题
- 手撕代码:加油站的问题
- 算法刷题