page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6248 次

3096 个回答

0 赞同

什么是IO多路复用?

I/O多路复用的本质是使用select,poll或者epoll函数,挂起进程,当一个或者多个I/O事件发生之后,将控制返回给用户进程。以服务器编程为例, 传统的多进程(多线程)并发模型,在处理用户连接时都是开启一个新的线程或者进程去处理一个新的连接,而I/O多路复用则可以在一个进程(线程) 当中同时监听多个网络I/O事件,也就是多...

回答于 2022-01-10 14:07

0 赞同

epool中et和lt的区别与实现原理?

LT:水平触发,效率会低于ET触发,尤其在大并发,大流量的情况下。但是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,因此不用担心事件丢失的情况。 ET:边缘触发,效率非常高,在并发,大流量的情况下,会比LT少很多epoll的系统调用,因此效率高。但是对...

回答于 2022-01-10 14:06

0 赞同

connect方法会阻塞,请问有什么方法可以避免其长时间阻塞?

最通常的方法最有效的是加定时器;也可以采用非阻塞模式。 或者考虑采用异步传输机制,同步传输与异步传输的主要区别在于同步传输中,如果调用recvfrom后会一致阻塞运行,从而导致调用线程暂停运行;异步传输机制则不然,会立即返回。

回答于 2022-01-10 14:05

0 赞同

迭代器的底层机制和失效的问题?

vector动态增加大小时,并不是在原空间后增加新的空间,而是以原大小的两倍在另外配置一片较大的新空间,然后将内容拷贝过来,并释放原来的空间。由于操作改变了空间,所以迭代器失效。

回答于 2022-01-08 10:58

0 赞同

为什么vector的插入操作可能会导致迭代器失效?

vector动态增加大小时,并不是在原空间后增加新的空间,而是以原大小的两倍在另外配置一片较大的新空间,然后将内容拷贝过来,并释放原来的空间。由于操作改变了空间,所以迭代器失效。

回答于 2022-01-08 10:58

0 赞同

vector的reserve()和resize()方法之间有什么区别?

首先,vector的容量capacity()是指在不分配更多内存的情况下可以保存的最多元素个数,而vector的大小size()是指实际包含的元素个数; 其次,vector的reserve(n)方法只改变vector的容量,如果当前容量小于n,则重新分配内存空间,调整容量为n;如果当前容量大于等于n,则无操作; 最后,vector的resize(n)方法改变vector的...

回答于 2022-01-08 10:57

0 赞同

标准库中有哪些容器?分别有什么特点?

标准库中的容器主要分为三类:顺序容器、关联容器、容器适配器。 顺序容器包括五种类型: array<T, N>数组:固定大小数组,支持快速随机访问,但不能插入或删除元素; vector<T>动态数组:支持快速随机访问,尾位插入和删除的速度很快; deque<T>双向队列:支持快速随机访问,首尾位置插入和删除的速...

回答于 2022-01-08 10:57

0 赞同

new/delete和malloc/free之间有什么关系?

 int *p = new int[2]; int *q = (int *)malloc(2*sizeof(int)); new与delete直接带具体类型的指针,malloc和free返回void类型的指针。new类型是安全的,而malloc不是。例如int *p = new float[2];就会报错;而int p = malloc(2sizeof(int))编译时编译器就无法指出错误来。new一般分为两步:new操作和构造。new操作对应与...

回答于 2022-01-08 10:55

0 赞同

delete与delete 有什么区别?

对于简单类型来说,使用new分配后,不管是数组数组还是非数组形式,两种方式都可以释放内存: int *a = new int(1); delete a; int *b = new int(2); delete [] b; int *c = new int[11]; delete c; int *d = new int[12]; delete [] d; 对于自定义类型来说,就需要对于单个对象使用delete,对于对象数组使用delet...

回答于 2022-01-08 10:55

0 赞同

内存块太小导致malloc和new返回空指针,该怎么处理?

对于malloc来说,需要判断其是否返回空指针,如果是则马上用return语句终止该函数或者exit终止该程序; 对于new来说,默认抛出异常,所以可以使用try...catch...代码块的方式: try { int *ptr = new int[10000000];} catch(bad_alloc &memExp) { cerr << memExp.what() << endl;}还可以使用set_new_hand...

回答于 2022-01-08 10:54