2016-09-27 12 views
-1

ページの先頭へのポインタを取得するにはどうすればよいですか?ページの先頭へのポインタを取得する方法

ノー成功に次のことを試してみました:

#define PAGESIZE 4096 

bool is_page_aligned(void *p) 
{ 
    return !((long int)p & 0xFFF); 
} 

int main(void) 
{ 
    bool res; 
    void *buffer; 

    buffer = malloc(PAGESIZE*2); 
    printf("%p\n", (void *) &buffer); 
    res = is_page_aligned(&buffer); 
    fputs(res ? "true\n" : "false\n", stdout); 
    return 0; 
} 

私はTLBミスを軽減しようとしています。あらゆる可能な支援が大いにありがたいです。

+0

質問を希望の動作、特定の問題やエラーとするために必要な最短のコードを含める必要があります。質問自体にそれを再現する。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:最小、完全、および検証可能な例を作成する方法。 – Olaf

+3

変数 'buffer'の位置が' buffer'が指すメモリではなく、ページが整列しているかどうかを調べています。 –

+0

スターターの場合:コードが未定義の動作を呼び出します。ポインタに算術演算を行うには、少なくとも正しい整数型を使用します(それでもUBですが、プラットフォーム上で動作する可能性が高い)。 – Olaf

答えて

0

アドレスaを含むページの先頭のアドレスを取得するには、ページサイズで割り、次にページサイズを掛けます。

long int page_beginning = PAGESIZE * (a/PAGESIZE); 

これは、整数除算の間に実行される切り捨てのために機能します。

また、弾性引くことができます(「?なぜ、このコードが動作していない」)、デバッグの助けを求めている

long int page_beginning = a - (a % PAGESIZE); 
関連する問題