圆整(roundup)--数据块对齐,内存对齐
来源:互联网 发布:dh算法攻击 编辑:程序博客网 时间:2024/05/29 02:46
static int roundup(int x, int y)
{
return ((((x) + (y) - 1) / (y)) * (y));
}
或者
static int roundup(int x, int y)
{
return ((((x) - 1) / (y)+1) * (y));
}
一下转自他人帖子:对圆整的理解
一般在考虑到内存对齐的程序里面势必要使用数的圆整算式,一般来说在计算机程序里一般都是圆整到2的次幂上,而很多书上也有很多基于'移位'操作的圆整到2的次幂上的算法公式,形式都是很简单的,很实用。
这里要说的是一个圆整到任意正整数(n > 1,圆整到1没有必要^_^)的算式,突然觉得如果说算法有些大了。我们来推导一下,也不是严密推导。就是怎么想的怎么说。
如果有两个正整数a、b,其中a >= 1, b > 1,求a圆整于b后的结果?
这里不妨考虑三种情况:
(1) a = b
毫无疑问结果应该就是b;
(2) a > b
a > b > 1 => a/b >= 1(计算机语言中的a/b) => 圆整结果为(a/b + 1) * b;---(1)
(3) a < b
1 =< a < b => a/b = 0 (计算机语言中的a/b) => 圆整结果为b <=> (0 + 1) * b => (a/b + 1) * b。---(2)
从上面式子可以看出当a b时可以统一成(a/b + 1) * b,但是a = b时 (a/b + 1) *b = 2b显然和正确结果b不符。这时如何统一算式呢?我们从条件考虑:
假设我们现在有一个x = a - 1 > b > 1,从x > b我们可以通过代入上面的公式(1)得出圆整结果:(x/b + 1) * b,这里a有了更严格的限制 a > 2;同样有一个 1 =< x = a - 1 < b,同样代入上面的公式(2)可以得出圆整结果: (x/b +1) * b,这里a >= 2了。
由上面两个结果,可以推出另一个形式的圆整算式: ((a - 1)/b + 1) * b,它对于(a >=2,b > 1成立)
那么当1 =
这样((a - 1)/b + 1) * b对于a >=1,b >1就都成立了,这个算式形式就统一了^_^。
#define ROUNDTO(a, boundary) ((((a) - 1)/(boundary) + 1) * (boundary))
//测试一下
std::cout << ROUNDTO(1, 2) 输出结果:
2
转自http://bigwhite.blogbus.com/logs/5503006.html
- 圆整(roundup)--数据块对齐,内存对齐
- 数据圆整ROUNDUP|DOWN
- 数据对齐/内存对齐 && 数据格式
- 内存对齐问题引起的添加NVRAM数据块失败
- 内存对齐(自然对齐)
- 内存中的数据对齐
- 内存中的数据对齐
- 内存中的数据对齐
- 内存中的数据对齐
- 内存数据对齐
- 内存中的数据对齐
- 内存数据对齐
- 内存中的数据对齐
- 内存中的数据对齐
- aligned 对齐 ??内存对齐/字节对齐/数据对齐/地址总线对齐?
- 内存中数据对齐相关
- 关于内存中的数据对齐
- 内存中的数据对齐问题
- 转 面向接口编程详解一
- 第二个Direct3D程序——旋转的正方体
- 调试control
- 这是我在chinaunix的博客---喜欢linux内的朋友多来交流!
- MDX children与members的误区
- 圆整(roundup)--数据块对齐,内存对齐
- JAVA乐园里的飞信登陆一直显示的是登陆导航服务器这是怎么回事
- extern "C"
- 《程序员的十层楼》的是与非
- Tomcat中的URL居然对大小写敏感
- MDI获得任何一个视图或文档
- 任何一个职业都很赚钱
- 把转载的,如何设置windows live writer记录在这儿
- 提高个税起征点可增加工薪层可支配收入