为什么inbuf = xmalloc(insize + page_size - 1)?

时间:2014-07-17 13:48:48

标签: c linux cat

我正在阅读cat源代码,但我不理解以下代码

insize = MAX (insize, outsize);
inbuf = xmalloc (insize + page_size - 1);

为什么创建的缓冲区大小为insize + page_size -1

1 个答案:

答案 0 :(得分:1)

当您需要分配将在页面边界上对齐的缓冲区时,这是一种常见的习惯用法(各种API都需要页面对齐的缓冲区,并且还可以提高内存吞吐量)。没有可移植的方法来询问malloc页面对齐的缓冲区,因此要求x + PAGE_SIZE-1字节可以保证您能够将结果指针四舍五入到下一页边界并仍然指向它到至少x个字节的块。