Nginx基础. Nginx中内存地址对齐(转)

2024-06-22 19:48

本文主要是介绍Nginx基础. Nginx中内存地址对齐(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面的内容取自     http://segmentfault.com/a/1190000002771908 (侵删, 感谢)


===========分割线===============
当a为2的某个幂的值时(例如a=2^2=4,或a=2^3=8),有以下特点:

a = 4:  二进制: 0000 0100       从右起,第三位为1,剩下全为0;
a = 8:  二进制: 0000 1000       从右起,第四位为1, 剩下全为0;
a = 16: 二进制:  0001 0000       从右起,第五位为1,剩下全为0;

a - 1 = 3:  二进制: 0000 0011   从右起,第三位之前,全是1;
a - 1 = 7:  二进制: 0000 0111   从右起,第四位之前,全是1;
a - 1 = 15: 二进制: 0000 1111   从右起,第五位之前,全是1;

~(a - 1) = ~3:  二进制: 1111 1100   从右起,第二位之后,全是1;
~(a - 1) = ~7:  二进制: 1111 1000   从右起,第三位之后,全是1;
~(a - 1) = ~15: 二进制: 1111 0000   从右起,第四位之后,全是1;
(理解的关键点) 一个数,一定是这个数的二进制从右起第一个不为零的位所表示的数的整数倍

比如:

a = 12:  二进制: 0000 1100 
从右起,第一个不为零的位所表示的整数为 0000 0100 即 4
那么,a = 12 一定是 4 的整数倍

如果,我们需要任意的一个数a对4取整怎么办呢?很简单,只需要把a从右起的若干位置0就可以了。
比如:

a = 13: 二进制:0000 1101
向0000 0100 即 4 取整,只需要将 0000 1101从右起,前两位置0,即可得到,0000 1100 即12

这个置0的过程可以表达为0000 1101 &  1111 1100
而 1111 1100 = ~(4 - 1),因此,13 对 4 取整的二进制运算即为:13 & ~(4 - 1)

可以看到,这样的二进制运算的结果是向下取整数倍。
但是,在申请内存时,只能比需求的大,而不能比需求的小,因此需要向上取整数倍:

对于一个任意的数d和一个2的任意次幂a:
d对a向下取整的二进制运算为:d & ~(a -1)
d对a向上取整的二进制运算为:(d + (a - 1)) & ~(a - 1)

相信到这里,已经可以很容易理解ngx_align这个宏的含义了

#define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1))

===========分割线===============

这篇关于Nginx基础. Nginx中内存地址对齐(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085241

相关文章

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-