使用malloc的unix机器的页面大小

时间:2010-11-13 17:26:13

标签: unix malloc page-size

如何使用malloc()?

了解unix机器的页面大小

2 个答案:

答案 0 :(得分:3)

我想如果你分配一个足够大的缓冲区,它必须得到另外几页,然后它会把缓冲区放在第一页的开头。因此,您可以分配两个非常大的缓冲区,删除缓冲区标头偏移,然后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));
}

答案 1 :(得分:2)

我不知道malloc与它有什么关系,但是:

#include <unistd.h>

(size_t) sysconf(_SC_PAGESIZE);