聘我网

新概念招聘3.0

posix_memalign存在的意义是什么?

vote up0vote downstar

malloc返回结果已经处理好对齐问题了,哪种状况还会需要它?

 

2 个答复

vote up0vote down

能想到的情况是:

  1. 为与某些特殊硬件交互,比如有些硬件要求内存按照4096比特对齐才能正常工作。
  2. 当按照2^N比特对齐时,指针p1的低N比特便可以用来保存一些元信息,成为p2,因为p2&^(2^N-1)便能还原为p1
链接
vote up0vote down

对齐到上确界:

#define ALIGN(x,a)    (((x)+(a)-1)&~(a-1)) 

举个例子4k页面边界的例子,即a=4096:如果x = 3888;那么以上界对齐,执行结果就是4096。如果x = 4096;结果是4096. 如果x = 4222; 则结果为8192.

对齐到下确界:

#define ALIGN(x,a) ((x)&~(a-1)) 

x = 3888; 结果为0. 如果x = 4096;结果是4096. 如果x = 4222; 则结果为4096. 你可以把这两种方式理解为“上进”和“丢弃”。

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.