嵌入式八股文3 编译与调试

1.编译过程(预编译(展开宏定义,处理预编译指令生成.i文件),编译(把.c或.cpp编译汇编指令,生成.S文件),汇编(把汇编编译成二进制文件.o),链接(链接所有的.o文件和库文件,生成可执行文件)
2.编译器优化(编译器会自动优化一部分代码,比如提高性能,减少冗余的代码内容,去掉不需要执行的代码等,对gcc用-O来开启优化,一般有3个优化等级,-O0表示不优化)
3.gcc如何开启调试信息(编译时加上-g选项)
4.gdb操作(gdb a.out进入gdb模式,run运行程序,b打断点,s单步调试,n单步调试进入子函数,thread_info查看线程,bt查看堆栈信息,f进入具体的栈帧,disassemble查看反汇编)
5.linux如何查内存泄漏(valgrind等工具,或者自己加日志埋点)
6.linux如何查程序崩溃(打断点或者打印大法或者gdb在崩溃后查coredump文件,找到堆栈信息,查看停在哪里)
7.makefile和cmake(makefile是make用来编译的规则,但是由于跨平台性不足及编写难度偏大,于是有了cmake工具。语法较多不展开多说,本质上是先把Cmakelist.txt的文本内容通过cmake转为makefile,然后编译器再根makefile进行编译)
8.动态链接和静态链接(动态链接是把依赖库单独放在一边,可执行文件中只有符号表没有二进制内容,因此是在程序执行时再去找二进制内容。静态链接是把所有依赖打包整合到可执行文件。动态链接的可执行文件小,更新灵活,可移植强,但需要运行时去搜索,性能相对差一点。静态链接缺点是可执行文件占用空间大,编译慢,优点是运行速度快,不依赖环境)
9.C++的'extern C'的作用(让C++程序正确调用C代码,因为C++虽然兼容C语法,但编译器生成的函数符号是不一样的,可能导致链接出错或者执行时出现undefined reference等提示)
10.编译时undefined reference出现原因(包含了头文件并调用了某个函数,但该函数没有被实现,只有声明没有定义。一般来说可能是没有对函数体进行编写,或者没有把对应的.c文件加入到编译工程。其次也可能是虚函数没有得到重写,找不到虚表等)
11.C程序函数参数入栈顺序(从右到左依次入栈)
全部评论

相关推荐

压力很大,面试官全程高压,问的问题不难,但是没有任何反馈,很慌张,也无算法。实习问了20分钟,一直问我你们做的有什么用,总时长一小时1.学校都有什么课程2.spring的ioc原理以及优点3.除了解耦还知道什么?4.springboot与spring区别,二者的源码看过没?Tomcat了解嘛?有没有具体看过5.spring的bean,面试官一直在重复一个思想问我懂不懂,完全没听过6.mybatis是干什么的?ibatis用过没?平常怎么写SQL?完全不写嘛?7.设计一个分布式双十一秒杀系统(前端,网关,缓存,数据库防超卖全设计)8.怎么做限流9.缓存与数据库一致性,你做异步要用户等你嘛?10.负载均衡怎么做11.多数据中心还是单数据中心,如果出现没卖完怎么做(到这完全不会了,面试官直接说换个话题吧)12.平常读书吗?13.上过哲学课嘛?14.兴趣爱好有没有15.对ai的看法16.来深圳有问题嘛?17.为什么不考研18.上大学带给了你什么?你提升在哪里,有没有具体的例子?反问:1.现在手机都有应用市场,应用宝怎么盈利?除了手机应用市场还是有人用,现在在做跨端,微软都有合作,之后会进军mac,主要做游戏,腾讯本身就是游戏大户。2.面试表现?整体评价一下会给到反馈。面完直接变HR面,今天HR面后,已经转为录用评估了,来牛客许个愿,暑期现在还没什么面试,希望能拿个offer之后再考虑要不要留在手子吧。
nunuking:三面压力这么大吗,面试的会议约了多长时间呀
面试问题记录
点赞 评论 收藏
分享
评论
2
17
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务