嵌入式面试专题—C/C++基本知识
目录二、C/C++高频面试题2.1 C/C++的相关概念面试题2.1.1 new和malloc的区别⭐⭐⭐⭐⭐2.1.2 malloc的底层实现⭐⭐⭐⭐(1)Malloc实现原理:2.1.3在1G内存的计算机中能否malloc(1.2G)?为什么?⭐⭐2.1.4指针与引用的相同和区别;如何相互转换?⭐⭐⭐⭐⭐(1)相同:(2)区别:(3)转换方法:2.1.5 C语言内存情况 内存分配的方式⭐⭐⭐(1)内存分配:(2)程序的内存空间:2.1.6 extern“C”的作用⭐⭐⭐2.1.7 函数头文件的声明前加extern 与不加extern 有什么区别⭐⭐⭐⭐2.1.10数组到底存放在哪里⭐⭐⭐2.1.11 C++中struct和class的区别 ⭐⭐⭐⭐⭐2.1.12 char和int之间的转换;⭐⭐⭐2.1.13 static的用法(定义和用途)⭐⭐⭐⭐⭐(1)c/c++共有:(2)c++独有:2.1.14 const的用法(定义和用途)⭐⭐⭐⭐⭐2.1.15 const常量和#define的区别,宏定义与全局变量区别⭐⭐⭐⭐(1)const常量和#define的区别(2)宏定义与全局变量区别2.1.16 volatile作用和用法 ⭐⭐⭐⭐⭐2.1.17有常量指针 指针常量 常量引用 没有 引用常量⭐⭐⭐2.1.18没有指向引用的指针,因为引用是没有地址的,但是有指向指针的引用⭐⭐⭐2.1.19 c/c++中变量的作用域⭐⭐⭐⭐⭐2.2 继承、多态相关面试题 ⭐⭐⭐⭐⭐2.2.1继承和虚继承 ⭐⭐⭐⭐⭐2.2.2多态⭐⭐⭐⭐⭐2.2.3被隐藏的基类函数如何调用或者子类调用父类的同名函数和父类成员变量 ⭐⭐⭐⭐⭐(1)C++有两种方法可以调用被隐藏的函数:(2)子类调用父类的同名函数:2.2.5对拷贝构造函数 深浅拷贝 的理解?什么时候需要自定义拷贝构造函数?⭐⭐⭐2.2.6析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,还有其他需考虑的因素吗?⭐⭐⭐2.2.7什么情况下会调用拷贝构造函数(三种情况)⭐⭐⭐2.2.8析构函数一般写成虚函数的原因⭐⭐⭐⭐⭐2.2.9构造函数为什么一般不定义为虚函数⭐⭐⭐⭐⭐2.2.10什么是纯虚函数⭐⭐⭐⭐⭐2.2.11静态绑定和动态绑定的介绍⭐⭐⭐⭐2.2.12 C++所有的构造函数 ⭐⭐⭐2.2.13重写、重载、覆盖和隐藏的区别⭐⭐⭐⭐⭐2.2.14成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)?⭐⭐⭐⭐2.2.15如何避免编译器进行的隐式类型转换;(explicit)⭐⭐⭐⭐补充C/C++:1、友元函数2、构造函数和析构函数3、vector扩容机制、删除机制(1)扩容机制(2)STL容器vector的删除机制:4、C++类的默认函数:5、STL vector的底层实现6、容器vector、链表list和双端队列deque的区别?二、C/C++高频面试题2.1 C/C++的相关概念面试题2.1.1 new和malloc的区别⭐⭐⭐⭐⭐①new、delete是C++中独有的操作符。new创建对象在分配内存的时候会自动调用构造函数,也会完成对对象的初始化,同理delete也能自动调用析构函数。malloc和free是C/C++中的标准库函数。不能够自动调用构造函数和析构函数。mallloc只是单纯为变量分配内存,free也只是释放变量的内存。②new返回的是指定类型的指针,可以自动计算所申请内存的大小。malloc返回的是void*类型,需要强行将其转换为实际类型的指针,并且需要指定好要申请内存的大小。③ C++允许重载new/delete操作符,而malloc和free是一个函数,不能重载。④new内存分配失败时,会抛出bad_alloc异常。malloc分配内存失败时返回空NULL。⑤new操作符从自由存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。2.1.2 malloc的底层实现⭐⭐⭐⭐答:在操作系统角度来看,分配内存有两种方式:①采用推进brk指针来增加堆的有效区域来申请内存空间。②采用mmap在进程的虚拟地址空间中找一块空闲的虚拟内存。(1)Malloc实现原理:malloc基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,在CPU芯片上叫做记忆存储单元(Memory Management Unit,MMU)的专用硬件,利用存放在主存中的页表来动态翻译虚拟地址。搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,分配大小合适的块给用户,另一个以新的空闲块放回空闲链表。如果没有搜索到可以满足用户要求的片段,那么就会推进break指针来申请内存空间。将相邻的小空闲块合并成较大的内存块。虚拟内存使得用户感觉内存空间时连续的。最后,空闲链会被切成很多的小内存片段。调用 free 函数时,最终会将用户释放的内存块连接到空闲链表上。2.1.3在1G内存的计算机中能否malloc(1.2G)?为什么?⭐⭐答:是有可能申请1.2G的内存的。malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。应用程序通过malloc函数可以向操作系统申请一块虚拟地址空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。(我们要申请空间的大小为1.2G=2 30 × 1.2 Byte ,转换为十六进制约为 4CCC CCCC ,这个数值还在 unsigned int 的表示范围。 malloc 函数要求的参数正是unsigned int。综上,是有可能通过malloc( size_t ) 函数调用申请超过该机器物理内存大小的内存块的。)2.1.4指针与引用的相同和区别;如何相互转换?⭐⭐⭐⭐⭐(1)相同:①引用和指针一样是地址概念,所以本身都是会占用内存的(有的编译器优化后就不占用内存了)。② 从内存分配上看:两者都是占内存的,程序为指针变量分配内存区域,在32位系统指针变量一般占用4字节内存。(2)区别:①指针是一个实体,指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名,引用本质是指针常量,所指向的对象不能改变,但指向的对象的值可以改变。② 指针和引用的自增(++)运算意义不一样,指针是对内存地址的自增,引用是对值的自增;③引用使用时无需解引用(*),指针需要解引用;④引用不能为空,指针可以为空;⑤引用只能在定义时被初始化一次,之后不可变;指针可变;⑦ “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小,在32位系统指针变量一般占用4字节内存。(3)转换方法:① 指针转引用:可以使用操作符将指针转换为引用② 引用转指针:可以使用 操作符将引用变量的地址赋值给指针2.1.5 C语言内存情况内存分配的方式⭐⭐⭐(1)内存分配:①从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。②在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。③从堆上分配:亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。(2)程序的内存空间:①栈区(stack):由编译器自动分配释放,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址。其操作方式类似于数据结构中的栈。②堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。③全局区(静态区)(static):存放全局变量、静态数据、常量。程序结束后由系统释放。④文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。⑤程序代码区:存放函数体(类成员函数和全局函数)的二进制代码。2.1.6 extern“C”的作用⭐⭐⭐extern "C"的主要作用是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。注:由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。2.1.7函数头文件的声明前加extern与不加extern有什么区别⭐⭐⭐⭐在C语言中,修饰符extern用在变量或者函数的声明前,进行显式声明,用来说明“此变量/函数是在别处定义的,要在此处引用,链接到定义它的文件中。总结:标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。2.1.10数组到底存放在哪里⭐⭐⭐数组是一种引用数据类型,可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问数组元素。数组元素和数组变量在内存里是分开存放的。实际的数组元素被存储在堆(heap)内存中;数组变量是一个引用类型的变量,被存储在栈(stack)内存中。2.1.11 C++中struct和class的区别

相关新闻

Claude Code插件市场实战指南:从安装排错到模型路由

Claude Code插件市场实战指南:从安装排错到模型路由

我最近把大部分编码日常都搬到了 Claude Code 里,说来也怪,真正让我对这个工具从"试用"变成"主力"的转折点,不是它写代码的速度,而是它的插件市场——官方管这个叫 Agent Skills 市场。这个功能让我第一次觉得…

2026/10/4 8:54:58 阅读更多 →
任务态fMRI预处理全指南:DPABI+SPM12参数设置与避坑手册

任务态fMRI预处理全指南:DPABI+SPM12参数设置与避坑手册

用DPABI和SPM12组合跑任务态fMRI预处理,是很多脑影像新手入坑的第一道门槛,也是整个任务态分析流程里最容易翻车、又最影响后续统计结果的一环。这篇笔记是“任务态fMRI分析”系列的第一篇,我把实际项目里调过的参数、踩过的坑、以及每一步预…

2026/10/4 8:54:58 阅读更多 →
原生 JavaScript 实现 TodoMVC:核心功能与问题总结

原生 JavaScript 实现 TodoMVC:核心功能与问题总结

一、项目简介本项目使用原生 HTML、CSS 和 JavaScript 实现一个 TodoMVC 待办事项应用,实现了任务添加、完成、删除、全选、筛选以及数据保存等功能。项目主要通过 todos 数组保存任务数据,再通过 render() 函数将数据显示到页面中。二、核心功能1. 任务…

2026/10/4 8:54:58 阅读更多 →

最新新闻

开源项目商业化破局:从许可证到社区治理

开源项目商业化破局:从许可证到社区治理

前阵子开源群里有位维护者发了一句很有代表性的话:代码开源了三年,star 也涨到几千了,但自己快撑不下去了。没有收入,贡献者来来走走,文档靠加班补,服务器靠众筹。这大概是国内大量开源项目最真实的处境。也…

2026/10/4 10:16:02 阅读更多 →
MobiFlight 11.3升级详解:.NET 10重构与多设备协同

MobiFlight 11.3升级详解:.NET 10重构与多设备协同

1. 项目概述:MobiFlight 11.3不是一次普通升级,而是飞行模拟硬核玩家的“系统级换代”如果你在Flight Simulator 2020或X-Plane里用过物理旋钮、开关、LED屏来控制航电面板,那你大概率已经和MobiFlight打过交道——这个开源硬件控制平台&…

2026/10/4 10:16:02 阅读更多 →
2026上海紧固件专业展实操指南:三天逛展看透行业风向

2026上海紧固件专业展实操指南:三天逛展看透行业风向

做紧固件这行的人,每年都有几天要把名片盒重新装满,把样品的包装擦干净,然后拖着一个拉杆箱去机场。2026年6月24日到26日,上海紧固件专业展又要来了,圈内人都把它叫作“全球紧固件产业风向标”。这个说法并不夸张&…

2026/10/4 10:16:02 阅读更多 →
多核共享内存模型:软件工程师必须掌握的并发底层原理

多核共享内存模型:软件工程师必须掌握的并发底层原理

1. 从一行代码说起:为什么软件工程师需要理解多核共享内存我做了十多年后端开发,早期写业务代码的时候,对CPU的认知基本停留在“核数越多越好”这个层面。直到有一次排查一个线上问题:一个看似线程安全的计数器,在压测…

2026/10/4 10:16:02 阅读更多 →
应用商店优化师(ASO)智能体实战指南:关键词研究、元数据优化与商店转化率提升的完整方法论

应用商店优化师(ASO)智能体实战指南:关键词研究、元数据优化与商店转化率提升的完整方法论

人工智能AI 技能提示工程 【免费下载链接】agency-agents-zh 🎭 277 个即插即用的 AI 专家角色 — 支持 Claude Code/Cursor/Copilot 等 20 种工具,覆盖工程/设计/营销/金融等 20 个部门。含 64 个中国市场原创智能体(小红书/抖音/微信/飞书/…

2026/10/4 10:16:02 阅读更多 →
RT-Thread CherryUSB 中 OHCI 主机控制器驱动的移植与配置指南

RT-Thread CherryUSB 中 OHCI 主机控制器驱动的移植与配置指南

操作系统嵌入式物联网嵌入式OSRTOS 【免费下载链接】rt-thread RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/ 项目地址: https://gitcode.com/gh_mirrors/rt/rt-thread 点击查看 免费下载 导读 本…

2026/10/4 10:15:01 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →