慢读nginx(1)strerror

strerror是获取错误码对应的错误字符串的工具,nginx为了提高效率,把错误码和对应的描述保存在了静态的表里面,使用的时候,只需用到访问数据下标,就能快速读取到错误码信息。

nginx系统初始化之后,第一件事就是初始化strerror。首先初始化了一个static的指针指向了一块大小为NGX_SYS_NERR*seizeof(ngx_str_t)的内存。

typedef struct {
    size_t      len;
    u_char     *data;
} ngx_str_t;

ngx_str_t这个结构,是由长度和指向该长度的数据的指针组成的。

    for (err = 0; err < NGX_SYS_NERR; err++) {
        msg = strerror(err);
        len = ngx_strlen(msg);

        p = malloc(len);
        if (p == NULL) {
            goto failed;
        }

        ngx_memcpy(p, msg, len);
        ngx_sys_errlist[err].len = len;
        ngx_sys_errlist[err].data = p;
    }

然后遍历strerror的值,并把该error的值和对应的字符串信息保存进ngx_sys_errlist.

使用的时候,根据读取信息的只在数据里面查找到对应的字符串指针。


ps:看了几篇ngint的相关blog之类,都说nginx尽量减少使用内存copy,从这里也能看出来一斑。

初始化一次,然后尽量引用这个初始化的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值