对c++11了解吗?有哪些新特性?
我说了解,新增了一些新的类型,例如long long,unsigned long,一些宽字符;大括号类型初始化更普遍了;新增一些智能指针;
更多细节可以看我这篇博客
https://blog.csdn.net/lishun1422840684/article/details/100013684
说了这几点,面试官就打断了我,问了我share_ptr是否线程安全,我支支吾吾了好久,答了一个c++不支持share_ptr线程安全,需要我们自己实现线程安全………
在网上找了找资料
正如boost文档所宣称的,boost为shared_ptr提供了与内置类型同级别的线程安全性。这包括:
1. 同一个shared_ptr对象可以被多线程同时读取。
2. 不同的shared_ptr对象可以被多线程同时修改。
3. 同一个shared_ptr对象不能被多线程直接修改,但可以通过原子函数完成。
如果把上面的表述中的"shared_ptr"替换为“内置类型”也完全成立。
如果你能保证不会有多个线程同时修改或替换指针指向的对象,不用加锁是完全没有问题的,或者说指针指向的对象本身已经是线程安全(包括多线程下的读写安全和构造析构安全)。总之一句话智能指针指向的对象的线程安全,标准库是没有保证的。
问有接触过多线程吗?
回答说自己目前的工作中使用的操作系统就是多线程的
问是什么系统?
答ecos
cpu占有率过高可能是因为什么情况?
回答了可能是后台跑的一些线程占用资源过多,已经使用完的资源没有及时释放。
网上找了找,大概可以从这么几点回答:
1.可能使用了debug version,跑了很多打印信息,占用了资源
2.代码中有死循环一直在跑 ---- 加个睡眠时间,这样不会一直占用cpu
可以用使用vmstat查看系统维度的CPU负载,使用top查看进程维度的CPU负载
栈的默认分配大小?
这个记不清了,当时回答了个几KB。
Windows下默认2M,Linux下默认8M。
堆的大小就是看虚拟内存的大小,比栈大得多