【面试题】24-08-17---CS---NaWeiEr---笔试题

1. 栈和堆有什么区别?

  • 栈和堆都是用来程序存储数据的内存区域。栈是一种有限的内存区域,可以用来存储局部变量、函数调用信息等。堆是一种动态分配的内存区域,用于存储程序运行时动态分配的数据。

  • 栈上的变量生命周期与其所在函数的执行周期相同,而堆上变量的生命周期由程序员显示控制,可以用(mallocnew申请),使用(freedelete释放)。

  • 栈上的内存分配和释放是自动的,速度较快。而堆上的内存分配和释放需要手动操作,速度相对较慢。


2. 什么是内存泄露?

  • 内存泄露指的是 程序未能释放不再使用的内存
  • 如何防止内存泄露:将内存的分配封装在类中,构造函数申请内存,析构函数释放内存;使用智能指针。

3. 析构函数为什么是虚函数呢?

  • 当派生类对象中有内存需要回收时,如果析构函数不是虚函数,不会触发动态绑定,只有调用基类的析构函数,导致派生类资源无法正确释放,造成内存泄露。

4. C/C++ 的编译过程?

  • 🐧① 预处理:
    宏替换:替换所有宏定义;
    文件包含:将头文件 (#include) 的内容插入到源文件中;
    条件编译:根据条件编译指令决定哪些代码被编译;
    移除注释:删掉所有注释;

  • 🐧② 编译:
    编译器将预处理后的文件转换为汇编代码;

  • 🐧③ 汇编:
    汇编器将汇编代码转换成为机器代码;

  • 🐧④ 链接:
    将目标文件和库文件链接成最终的可执行文件;


5. #pragma once与#ifndef #define #endif 的区别

  • 目的:都是为了防止头文件在编译过程中被多次包含,他们都能解决重复包含的问题。
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小Jie努力认真找工作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值