etc —— (1)

1. 线程是否有自己独立的地址空间?

线程不拥有系统资源,地址空间是按进程分配的,但在地址空间里有专属于线程的线程栈。

地址空间是系统给进程分配的虚拟内存。线程栈是线程自己独有的,其余是共享的,他们在虚拟内存里。

2.在多核CPU上,对于耗时长的任务,为什么多线程可以缩短耗时:

1、多线程在单核和多核CPU上的执行:

多线程在单cpu中其实也是顺序执行的,单核CPU时使用多线程,通常是有线程要处于等待状态。

2、为什么有时候线程数超过CPU内核数会更快呢?

原因是这种程序的单个线程运算量不足以占满CPU一个内核(比如存在大量IO操作,IO比较慢,是程序瓶颈)。多线程的用处在于,做某个耗时的操作时,需要等待返回结果,这时用多线程可以提高程序并发程度。如果一个不需要任何等待并且顺序执行能够完成的任务,用多线程简直是浪费。

3、 线程越多越好吗?什么时候才有必要用多线程?

线程必然不是越多越好,线程切换也是要开销的,当你增加一个线程的时候,增加的额外开销要小于该线程能够消除的阻塞时间,这才叫物有所值。

3.cache可以缓解主存和CPU之间的速度差异,原因是?

CPU缓存(CacheMemory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。

缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。
  
  在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
  
  缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;
  
  如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
  
  正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。
  
  这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。
  
  总的来说,CPU读取数据的顺序是先缓存后内存。

4.对于一个具有n个结点的有序链表,插入一个节点并使它有序,其时间复杂度为O(N)

5.构造函数不可以是虚函数,而析构函数可以且常常是虚函数。

6.析构函数调用的次序是先派生类的析构,后基类的析构

在基类的的析构调用的时候,派生类的信息已经全部销毁了。

定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数。

7. 32位系统和64位系统

32位系统具有2 ^ 32个可能的地址,也就是4,294,967,296。

64位系统的容量是2 ^ 64,也就是18,446,744,073,709,551,616。约40亿字节和18万亿字节,

32位的寻址空间是32个bit,也就是4个字节,所以32位操作系统的指针大小为4个字节。

8.sizeof 和strlen

strlen 测量的是字符的实际长度,以’\0’ 结束。而sizeof 测量的是字符的分配大小。

char str1[] = "hello";
    char str2[] = {'h', 'e', 'l', 'l', 'o', '\0'};
    char str3[] = {'h', 'e', 'l', 'l', 'o'}; 
    printf("str1:%s\n",str1);
    printf("str2:%s\n",str2);
    printf("str3:%s\n",str3);
    printf("str1:%d\n", strlen(str1));
    printf("str2:%d\n", strlen(str2));
printf("str3:%d\n", strlen(str3));


Hello
Hello
Hellohello
5
5
10

我们知道字符串是以 ‘\0’ 为结束标志的,所以char str1[ ] = “hello” 等效于char str2[ ] = {‘h’ , ‘e’ , ‘l’ , ‘l’ , ‘o’ , ‘\0’} 。strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’\0’停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值