内存对齐
来源:互联网 发布:forge软件 下载 编辑:程序博客网 时间:2024/06/06 05:31
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
对于两个正整数 x, n 总存在整数 q, r 使得
x = n * q + r, 其中 0<= r <n
q, r 是唯一确定的。
q = [x/n], r = x - n[x/n].
这个是带余除法的一个简单形式。在 c 语言中, q, r 容易计算出来:
q = x / n r = x % n
所谓把 x 按 n 对齐指的是:若 r=0, x = qn, 若 r>0, 取 x = (q+1)n. 这也相当于把 x 表示为:
/*我的考虑: 假设x占10位空间,n占3位空间,那么10 = 3 * 3 + 1。此时如定义12个空间则可以正好放下4个n,1个x,即要定义的空间能整除n,而且恰好比x大一点点*/ x = n * q + r', 其中 -n < r' <=0 //最大非正剩余
nq 是我们所求。关键是如何用 c 语言计算它。由于我们能处理标准的带余除法,所以可以把这个式子转换成一个标准的带余除法,然后加以处理:
(r和最上面的范围一样)
x + n = q * n + (n + r'),其中 0 < n + r' <= n x + n - 1 = q * n + (n + r' - 1), 其中 0<= n + r' - 1 <n
所以 q * n = [(x + n - 1) / n] * n.
用 c 语言计算就是:
(( x + n - 1) / n) * n
若 n 是 2 的方幂, 比如 2^m,则除为右移 m 位,乘为左移 m 位。所以把 x+n-1 的最低 m 个二进制位清 0就可以了。得到:
(x + n - 1) & (~(n - 1))
0 0
- 关键字 对齐 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 编写一个学生和教师数据输入和显示程序
- codeforce 304 B. Soldier and Badges
- 控制反转与依赖注入
- C语言中的-------结构
- 最详细的Log4j使用教程
- 内存对齐
- MySQL的基本操作
- JS如何模拟鼠标点击X,Y坐标
- 模糊C均值
- scala programming 原代码
- 使用AVFoundation实现iOS原生二维码、条形码扫描(可限制扫描范围、可手动调节焦距)
- 剑指Offer-->从上向下打印二叉树(层序遍历 + 详解)
- POJ 2081 Recaman's Sequence
- untiy注意问题