1

malloc() を使用して UNIX マシンのページ サイズを知るにはどうすればよいですか?

4

2 に答える 2

3

十分な大きさのバッファーを割り当てると、さらに数ページを取得する必要があり、最初のページの先頭にバッファーが配置されると思います。したがって、2 つの非常に大きなバッファーを割り当て、バッファー ヘッダー オフセットを削除してから、2 つのバッファーを 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));
}
于 2010-11-13T18:05:24.410 に答える
2

ただし、mallocがそれと何の関係があるのか​​ はわかりません:

#include <unistd.h>

(size_t) sysconf(_SC_PAGESIZE);
于 2010-11-13T17:40:28.470 に答える