146.C++中左值和右值是什么?++i是左值还是右值,++i和i++哪个效率更高?
第一小问结合本文第七和第八问,++i是左值,因为++i返回的是一个左值没有发生拷贝,所以效率更高。
147.理解左值和右值? 左值(L-value):左值表示一个内存位置的标识符,可以出现在赋值语句的左边或右边。左值在表达式中是持久的,具有地址,并且可以被修改。可以将其简单理解为"可以取址的表达式"。一般来说,变量、函数或内存中的对象都可以是左值。 右值(R-value):右值表示暂时的、临时的值,不能出现在赋值语句的左边。右值在表达式中是短暂的,不具有地址,不能被修改。可以将其简单理解为"没有地址的表达式"。一般来说,常量、字面量、临时对象、表达式的结果等都可以被视为右值。 148.说一说C与C++的内存分配方式? 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3)从堆上分配(动态内存分配)程序在运行的时候用malloc或new申请任意多少的内存,程序员负责在何时用free或delete释放内存。动态内存的生存期自己决定,使用非常灵活。

149.介绍一下vector、list的底层实现原理和优缺点 Vector优点:可使用下标随机访问,尾插尾删效率高。
缺点:前面部分的插入删除效率低,扩容有消耗,可能存在一定的空间浪费。 底层是由一块连续的内存空间组成,由三个指针实现的分别是头指针(表示目前使用空间的头),尾指针(表示目前使用空间的尾)和可用空间尾指针实现 List优点:按需申请内存,不需要扩容,不会造成内存空间浪费。在任意位置的插入删除下效率高。 缺点:不支持下标随机访问 底层是由双向链表实现的 150.什么时候用进程,什么时候用线程? 使用进程的情况: 1.需要独立的地址空间和系统资源:如果任务需要运行在独立的环境中,不同任务之间的数据隔离较为重要,那么可以选择使用进程。 2.需要更高的安全性和稳定性:如果一个任务的崩溃不应该影响其他任务的正常运行,使用进程可以保证更高的安全性和稳定性。 3.并行计算需求:如果任务需要充分利用多核处理器的计算能力,可以通过多个独立的进程并行执行来提高计算效率。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/157427.html