【发布时间】:2011-05-09 14:17:00
【问题描述】:
我如何使用 malloc() 知道 unix 机器的页面大小?
【问题讨论】:
-
为什么需要使用malloc()?为什么不使用 getpagesize()?
-
面试时被问到的,所以他们可能想问我是否知道 malloc 返回什么以及它实际保留什么(可能是一个页面)
我如何使用 malloc() 知道 unix 机器的页面大小?
【问题讨论】:
我猜如果你分配一个足够大的缓冲区,它必须再获取几页,然后它会将缓冲区放在第一页的开头。所以你可以分配两个非常大的缓冲区,删除缓冲区头偏移量,然后 GCD 两个缓冲区。在我的系统上运行得非常好。
#include <stdlib.h>
#include <stdio.h>
unsigned gcd(unsigned a, unsigned b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
void main() {
void *p1 = malloc(1000000);
void *p2 = malloc(1000000);
unsigned p1r = (unsigned) p1 & 0xfffffff0;
unsigned p2r = (unsigned) p2 & 0xfffffff0;
printf("page size = %u\n", getpagesize());
printf("p1 = %p, p2 = %p\n", p1, p2);
printf("p1r = %p, p2r = %p\n", p1r, p2r);
printf("gcd = %u\n", gcd(p1r, p2r));
}
【讨论】:
不过,我不知道 malloc 与它有什么关系:
#include <unistd.h>
(size_t) sysconf(_SC_PAGESIZE);
【讨论】: