2011-12-25 5 views
2
#include <unistd.h> 
(size_t) sysconf(_SC_PAGESIZE); 

sysconf(_SC_PAGESIZE)は、オペレーティングシステムとプロセッサでメモリページサイズが4096であることを示しています。メモリページの4096バイトのうち、データに使用できるものの数とオーバーヘッド/メタデータの量はどれくらいですか?mallocedメモリページはどれくらい使用できますか?

頻繁にアクセスされるポインタを同じキャッシュブロックにパックすることでキャッシュのローカリティを最適化するアプリケーションがあり、メモリページ全体が使用可能かどうかを知る必要があります。ページ。

+0

オペレーティングシステムまたはmallocオーバーヘッド? 'malloc'はそれぞれの割り当てにオーバーヘッドがあります。 – u0b34a0f6ae

答えて

5

メタデータなし。 4096バイトが使用可能です。
OSはどこかの場所にメタデータを保存しますが、それは他のページにありますので、気にする必要はありません。

ただし、メモリにアクセスできるかどうかは、ページサイズに依存しません。 100バイトを割り当てた場合は、100バイトしかアクセスできません。 4096を割り当てた場合、4096にアクセスできます。

+0

メタデータは、割り当てられたページには格納されません。それは私が知る必要があったものです。他の人は、メタデータが割り当てられたページの先頭にあることを示唆しました。 – HaltingState

+0

'malloc'を使うと、メタデータは実際に割り当てられたデータの前に置かれます。しかし、4096バイトを割り当てた場合は、取得したポインタから4096バイトを使用できます。 – ugoren

+0

これは、答えの2行目と矛盾しています。ここでは、メタデータがmallocによって返されたブロックに格納されているのではなく、他のページに格納されていると述べています。 – HaltingState

関連する問題