嵌入式基础知识(5)——linux、c\c++

1、常用的linux命令

       常用的linu命令有:cd:切换当前目录   ls:查看当前文件与目录   grep:通常与管道命令一起使用,用于对一些命令的输出进行筛选加工   cp:复制文件或者文件夹   mv:移动文件或者文件夹  rm:删除文件或者文件夹   ps:查看进程情况   kill:向进程发送信号  tar:对文件进行打包   cat:查看文件内容   top:查看操作系统的信息,如进程、CPU占有率、内存信息等(实时)   free:查看内存使用情况   pwd:显示当前工作目录。

2、浅拷贝和深拷贝

       浅拷贝和深拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是“引用”。浅拷贝和深拷贝一般在拷贝构造函数和赋值运算符重载函数中涉及到。

       浅拷贝:浅拷贝又称为值拷贝,将源对象的值拷贝到目标对象中,如果对象中有某个成员是指针类型数据,并且是在堆区创建,则使用浅拷贝仅仅拷贝的是这个这个指针变量的值,也就是在目标对象中该指针类型数据和源对象中的该成员指向的是同一块堆空间。这样会带来一个问题,就是在析构函数中释放该堆区数据,会被释放多次。默认的拷贝构造函数和默认运算符重载函数都是浅拷贝。

       深拷贝:深拷贝是在拷贝的时候先开辟出和源对象大小一样的空间,然后将源对象里的内容拷贝到目标对象中去,这样指针成员就指向了不同的内存位置。并且里面的内容是一样的,这样不但达到了拷贝的目的,还不会出现问题,两个对象先后去调用析构函数,分别释放自己指针成员所指向的内存。即为每次增加一个指针,便申请一块新的内存,并让这个指针指向新的内存,深拷贝情况下,不会出现重复释放同一块内存的错误。

3、宏函数和内联函数的区别

       内联函数是代码被插入到调用者代码处的函数。如同#define宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过(“过程集成化”)被编译器优化。宏定义不检查函数参数和返回值,只是展开,相对来说,内联函数会检查参数类型,所以更安全。内联函数和宏很类似,但是也有区别,其一是宏是预处理器对宏进行替代,而内联函数是通过编译器来实现的。其二是内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销,你可以像像调用函数一样来调用内联函数,而不用担心会产生于处理宏的一些问题。

4、传引用和传指针区别

      指针从本质上讲就是存放地址变量的一个变量,在逻辑上是独立的,它可以被改变,包括其所指的地址的改变和其所指的地址中所存放的数据的改变。而引用是一个别名,他在逻辑上不是独立的,他的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期是不能被改变的(自始至终只能依附于同一个变量)。

5、C语言中,static关键字的作用

      在C中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成来全局静态变量。全局静态变量在全局区分配内存,如果没有初始化,其默认值为0,该变量本文件内从定义开始到文件结束可见。定义局部静态变量:在局部变量前面加上关键字static,该变量在全局数据区分配内存,始终驻留在全局数据区,直到程序运行结束。其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。定义静态函数:静态函数不能被其他文件所用,其他文件中可以定义相同名字的函数,不会发生冲突。
6、C语言中如何定义节省内存

       有三种,1.在保证值域足够的情况下,用小字节变量代替大字节变量,例如用short代替int。2.将各成员所占字节数从小到大声明,以尽量减小中间的填补空间(字节对齐)。3.可以取消字节对齐,#pragma pack(1),当然这会牺牲效率,谨慎采用。

7、malloc和new的区别

       主要有四大区别:1.申请的内存所在位置不同。new操作符从自由存储区上为对象动态分配内存空间,malloc函数从堆上动态分配内存。2.返回类型安全性不同。new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。malloc内存分配成功则是返回void *,需要通过强制类型转换将void *指针转换成我们需要的类型。3.内存分配失败时的返回值不同。new内存分配失败时,会抛出bac_accoc异常,它不会返回NULL。malloc分配内存失败返回NULL。4.是否需要指定内存大小不同。使用new操作符申请内存分配时无需指定内存块的大小,编译器会根据类型信息自行计算。malloc则需要显式地指出所需内存的尺寸。

8、C++在何种情况下必须使用初始化列表

       主要有两种:1.成员类型是没有默认构造函数的类。若没有提供显示初始化格式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。2.const成员或者引用类型的成员。因为const对象或引用类型只能初始化,不能赋值。

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值