C++面试题(1)

进程线程与深浅拷贝详解

1.进程和线程的区别

答案:

一个程序至少有一个进程,一个进程至少有一个线程。

进程在执行过程中有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行效率。

进程和线程的主要区别在于他们是不同操作系统资源管理方式,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉了,整个进程也就死掉了,所以多进程的程序要比多线程的程序健壮,但在进程切换的时候,耗费资源大,效率要差一些,但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

a.进程是资源分配的最小单位,进程是程序执行的最小单位。

b.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而提高了程序的运行效率。


2.深浅拷贝的区别

浅拷贝:在有指针的情况下,浅拷贝只是添加了一个指针指向已经存在的内存。

深拷贝:在有指针的情况下,深拷贝不仅添加了一个指针,而且还申请一个新的内存,使这个添加的指针指向新增的内存,避免像浅拷贝时出现的重复释放同一个内存的错误。

例如:

CODE1:
class String
{
    char *m_str;
public:    
    String();
    String(char *s) { m_str = s; }
    String &operator =(const String s) { m_str=s.m_str; return *this; }// 浅拷贝,直接将指针指向已经存在的内存中


}
int main()
{
String s1("abc"),s2;
s2=s1;
std::cout<<s2;
}


ODE2:
class String
{
    char *m_str;
public:    
    String();
    String(char *s) { m_str = s; }
    String &operator =(const String s) 
    {  
        if(strlen(m_str)!=strlen(s.m_str))
            m_str=new char[strlen(s.m_str)+1]; 
        if(*this!=s)
            strcpy(m_str,s.m_str);
        return *this;
    }// 深拷贝,有指针情况下申请了新的内存,且指针指向了新的内存


}
int main()
{
String s1("abc"),s2;
s2=s1;
std::cout<<s2;
}








3.Tcp socket通讯



4.单链表的反序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值