libevent - select NFDBITS fd_mask 计算
#define howmany(x, y) (((x)+((y)-1))/(y))
计算下 需要多少个y长度
y==32 需要多少个 int
y==8 需要多少个char
fd = 0~1023
用位数组保存,那么一个int 可以存32个fd, 1024(32*32)个fd 只要32个int 就可以存完了
也就相当于 32*sizeof(int) = 32*4 = 128 个char 啦 malloc(p, 128); 够啦:)
那么要保存2048个值 需要多大的位数组呢? howmany(2048, 32) * sizeof(int)
fd_set 不够大怎么办?
c语言结构体我人为的元素末尾扩充
fd_set* event_readset_in = malloc(sizeof(fd_set)); 本来这就够了啦
因为原始的可能不够大
所以 我根据 fd 最大值 动态的扩充这个 fd_set
fd 为 1023, 0~1023, 嗯我其实要保存1024个,于是
howmany(maxfd+1, 32)*sizeof(int) 就是至少要分配的数量
那么操作系统用int来保存的么? 我不知道 但是有 NFDBITS 和 fd_mask
libevent的作者看了 linux 等的源代码。得出如下计算公式,fd_mask 你看 mask都有了,它应该和元素尺寸一样大
如果 fd_mask 是 int , 那么NFDBITS就应该是 sizeof(int)*8
event_readset_in = realloc(event_readset_in, howmany(maxfd+1, NFDBITS)*sizeof( fd_mask) )
我觉得应该确保这个等式成立 NFDBITS == sizeof(fd_mask)*8
libevent - select NFDBITS fd_mask 计算相关推荐
- select fd_set
2019独角兽企业重金招聘Python工程师标准>>> fd_set 结构,是一个数字. 文件描述符fd的值 不能超过1024,而不是数量不能超过1024. 在开发打开句柄多的程序时 ...
- Libev源码分析09:select突破处理描述符个数的限制
众所周知,Linux下的多路复用函数select采用描述符集表示处理的描述符.描述符集的大小就是它所能处理的最大描述符限制.通常情况下该值为1024,等同于每个进程所能打开的描述符个数. 增大描述符集 ...
- SELECT 语句与其子句的详解
SELECT 从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列.虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELECT select_list [ INTO ...
- sql计算留存_SQL基础第七讲:关于用户留存率的计算
最近,好几个小伙伴都拿着关于用户留存的面试题来问我,所以今天单独开一篇文章讲一下留存问题. 首先看一下留存是什么,简单来说,我和你今天在一家超市购物了,明天我来购物了,你没来,那么我就是这个超市的留存 ...
- 数据库之查询表sc——计算1号课程的学生平均成绩。
SELECT AVG(grade) //计算平均成绩FROM sc //从sc表中查询WHERE cno = '1';//限制条件,查询1号课程
- 【Hive】常用日期格式转换和计算
文章目录 格式转换 字符串 方法一:substr + concat 方法二: from_unixtime+ unix_timestamp 时间戳或者日期 方法一:date_format(time_va ...
- mysql 按时间累计计算_mysql查询——计算占比与累计占比
点击上面"蓝字"关注我们! 下表是2020年3月各产品的销量数据表(product_sales),其中包含字段序号Id.产品product.销量Sales,现在需要编写一个查询语句 ...
- 根据出生日期计算年龄,精确到日(C++实现)
** 实现了一个小程序,实现根据出生日期计算年龄 ** 这里没有考虑如果出生年为闰年,或者当前年为闰年时出生日期为二月的情况 如果需要考虑,那么计算前加入一个闰年判断,并且根据是否闰年在计算时调用不同 ...
- SQL数据分析:sqlzoo官网学习select,where,order by,limit,聚合函数,having,常用函数,窗口函数,表链接,子查询
SQL数据分析: 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金 ...
最新文章
- 惊呆!谷歌AI自动编程效率超研发工程师,作为AI工程师的我感到了森森的压力
- mysql使用shell脚本部署_shell脚本部署mysql主从
- 8086CPU写汇编的规则
- 取消对 null 指针“l”的引用。_C语言编程笔记丨C 语言指针 5 分钟教程
- 贝叶斯分析好坏_贝叶斯统计 | 第五章第一部分 决策基本概念
- vue 在已有的购买列表中(数据库返回的数据)修改商品数量
- 向后台接口传递FormData格式的数组对象
- [新品发布]全球首个百万IOPS云盘来了 阿里云推出超高性能云盘ESSD
- 【spark】Spark的介绍、安装以及配置相关介绍
- zxr10交换机配置手册vlan_最新中兴ZXR10交换机配置资料
- 【新技术】 移动支付过程中的NFC技术
- 0基础,如何快速学习自媒体,详细教程
- 基于Hadoop的电商用户分析系统
- 运动垫的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- Form(窗体)的FormBorderStyle属性的不同效果
- canvas实现水印效果
- Windows10下WebLogic的下载与安装
- jvm原理解析--不疯魔不成活
- SAP 公司代码与采购组织的分配关系
- 单片机 怎调用显示屏字库_单片机巧用Windows矢量字库