IE盒子

帖子
查看: 123|回复: 0

C/C++ 常见1000道面试题( 61 )

[复制链接]

2

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-3-26 18:52:00 | 显示全部楼层 |阅读模式
411.c语言的malloc和c++中的new有什么区别?

new、delete是操作符,可以重载,只能在c++中使用
malloc、free是函数,可以覆盖,c、c++中都可以使用
new可以调用对象的构造函数,对应的delete调用相应的析构函数
malloc仅仅分配内存,free仅仅收回内存,并不执行构造和析构函数
new、delete返回的是某种数据类型指针,malloc、free返回的是void指针
注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。
412.写一个”标准“宏MIN

#define min(a,b)((a)<=(b)?(a):(b))
413.++i和i++的区别

++i先自增1,再返回,i++先返回i,再自增1
414.volatile有什么作用

状态寄存器一类的并行设备硬件寄存器
一个中断服务子程序会访问到的非自动变量。
多线程被几个任务共享的变量
注意:虽然volatile在嵌入式方面应用比较多,但是在pc软件的多线程中,volatile修饰的临界变量也是非常实用的。
415.一个参数可以既是const又是volatile吗

可以,用const和volatile同时修饰变量,并且这个变量在程序内部是只读的,不能改变的,只在程序外部条件变化下改变,并且编译器不会优化这个变量。每次使用这个变量时,都要小心的去内存读取这个变量的值,而不是去寄存器读取他的备份。
注意:在此一定要注意const的意思,const只是不允许程序中的代码改变某一变量,其在编译期发挥作用,他并没有实际的禁止某段内存的读写特性。
416.a和&a有什么区别?

&a:其含义就是”变量a的地址“
*a:用在不同的地方,含义也不一样
在声明语句中,a只说明a是一个指针变量,如int *a;
在其他语句中,a前面没有操作数且a是一个指针时,a代表指针a指向的地址内存放的数据,如b=a;
*a前面有操作数且a是一个普通变量,a代表乘以a,如c=ba。
417.用c编写一个死循环程序

while(1)
{}
注意:很多种途径都可以实现同一种功能,但是不同的方法时间和空间占用度不同,特别是对于嵌入式软件,处理器速度比较慢,存储空间较小,所以时间和空间优势是选择各种方法的首要考虑条件。
418.结构体内存对齐的问题

请写出以下代码的输出结果:




说明:结构体作为一种复合数据类型,其构成元素既可以是基本数据类型的变量,也可以是一些复合型类型数据。对此,编译器会自动进行成员变量的对齐以提高运算速率。默认情况下,按自然对齐条件分配空间。各个成员按照他们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同,向结构体成员中size最大的成员对齐。
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,他们会要求这些数据的首地址是某个数k(通常为4或8)的倍数,而这个k则被称为该数据类型的对齐模数。
419.全局变量和局部变量有什么区别?是怎么是实现的?操作系统和编译器是怎么知道的?

全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到结束(在程序结束时所占内存释放);
而局部变量存在于模块(子程序、函数)中,只有所在模块可以访问,其他模块不可直接访问,模块结束(函数调用完毕),局部变量消失,所占据的内存释放;
操作系统和编译器,可能是通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载,局部变量则分配在堆栈里面。
420.简述c、c++程序编译的内存分配情况

从静态存储区域分配
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量、常量字符串等。
从栈上分配
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。大小为2M.
从堆上分配
即动态内存分配。程序在运行的时候用malloc和new申请任意大小的内存,程序员自己负责在何时用free和delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收他,否则运行的程序会出现内存泄露,另外频繁的分配和释放不同大小的堆空间将会产生”堆内碎块“。
一个c、c++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码块区。
1000道c/c++经典面试题PDF,进官方交流群获取




—————————————Linuxc/c++高性能服务器开发网官方3群—————————————–
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表