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

标签 c linux cat

我正在阅读cat源代码,但我不明白下面的代码

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

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

最佳答案

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

关于c - 为什么inbuf = xmalloc(insize + page_size - 1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805417/

相关文章:

shell - 如何将太大的 .text 文件合并为一个?

linux - 检查 bash 脚本上的特定端口是否有字符串数据

c - Turbo C 编译器问题,sqrt() 函数不适用于可变参数

arrays - 是否有 O(n) 算法来查找数组中第一个缺失的数字?

linux - 令人困惑的 Makefile

linux - 如何在 bash 中评论参数列表

linux - Erlang,process_flag trap_exit 从 CLI 杀死了我的 gen_server

windows - 如何删除 ^M 个字符?

c - 如何使用 C 覆盖文件内的结构?

c - tcp ip 检查我遗漏了一些东西