首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
241 阅读
2
nvim番外之将配置的插件管理器更新为lazy
133 阅读
3
2018总结与2019规划
133 阅读
4
从零开始配置 vim(15)——状态栏配置
120 阅读
5
PDF标准详解(五)——图形状态
102 阅读
软件与环境配置
读书笔记
编程
Thinking
FIRE
菜谱
翻译
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
emacs
VimScript
读书笔记
linux
elisp
文本编辑器
Java
反汇编
OLEDB
数据库编程
投资理财
Masimaro
累计撰写
362
篇文章
累计收到
32
条评论
首页
栏目
软件与环境配置
读书笔记
编程
Thinking
FIRE
菜谱
翻译
页面
归档
友情链接
关于
搜索到
1
篇与
的结果
2017-12-07
向上取整算法
在进行内存分配的时候一般都需要在实际使用内存大小的基础上进行内存对齐,比如一般32位平台进行4字节对齐,而64位平台使用8字节对齐等等。一般采用的算法是先利用公式$$int(\frac{a + b - 1} { b})$$(其中a是实际使用的内存, b是对齐值)然后根据这个值乘以b即可得到对应的对齐值公式推导$ 假设 A = NB +M (M \in \left[0,B-1\right])$$\because\frac{A}{B} = N + \frac{M}{B}$$\because M \in\left[0, B-1\right]$$\therefore \frac{A}{B} \leq \frac{NB +B -1}{B} \leq \frac{A + B -1}{B}$从上面可以得出$\frac{A}{B}$向上取整可能是int($\frac{A+B-1}{B}$)但是具体是否有比它小的整数,仍然不能确定.因此我们根据推导一下这个结果与$\frac{A}{B}$向上取整的结果是否相同$ 假设 A = NB +M (M \in \left[0,B-1\right])$$当M = 0时UP(\frac{A}{B}) = N$$当M \neq 0时,UP(\frac{A}{B}) = N$而针对int($\frac{A+B-1}{B}$)的结果$当M = 0时int(\frac{A+B-1}{B} )=int(\frac{NB+B -1}{B}) = int(N + 1 - \frac{1}{B}) $$\because \frac{1}{B} < 1$$\therefore int(\frac{A+B-1}{B} )$$当 M \neq 0 时int(\frac{A+B-1}{B} ) = int(\frac{NB +M + B -1}{B}) = int(N + 1 + \frac{M-1}{B})$$当M = 1时 int(\frac{A+B-1}{B} ) = int(N + 1 + \frac{M-1}{B}) = N + 1$$当1 < M \leq B-1时 \frac{M -1}{B} < 1$<br/>$\therefore int(\frac{A+B-1}{B} ) = int(N + 1 + \frac{M-1}{B}) = N$从上面的推导来看二者的值完全相同所以可以得出结论$UP(\frac{A}{B}) = int(\frac{A + B - 1}{B})$所以当我们对A字节的内存进行B字节的对齐时可以使用公式$int(\frac{A + B - 1}{B}) \times B $补充其实还有一个算法long(A + B - 1) &~ (B - 1)也可以计算,但是我没有弄清楚它的原理是什么,暂时不管先记住再说^_^
2017年12月07日
11 阅读
0 评论
0 点赞