0

データ型または構造アラインメント、パッキング、パディングの問題などの概念を認識しています。各ノードが約250バイト、つまり64バイトのキャッシュラインの約4倍のサイズを占める単一のリンクリストを実装しました。私のマシンはIntel64ビットアーキテクチャです。

現在、単一のリンクリストは本質的にデータ構造を追跡するポインタであるため、キャッシュミスが多数発生します。キャッシュミスを減らすために、* posix_memalign *関数を使用して各データ構造ノードを整列させ、64バイトの境界線をキャッシュしました。これで、すべてのリンクリストノードがキャッシュアラインされました。

これを行った後、リンクリストのメモリ消費量が大幅に増加し、パフォーマンスも実際に低下していることがわかりました。何がうまくいかない可能性があるのか​​誰かが説明できますか?

4

1 に答える 1

0

使用しているmallocはわかりませんが、これはtcmallocからのものです

// For use by exported routines below that want specific alignments
//
// Note: this code can be slow for alignments > 16, and can
// significantly fragment memory.  The expectation is that
// memalign/posix_memalign/valloc/pvalloc will not be invoked very
// often.  This requirement simplifies our implementation and allows
// us to tune for expected allocation patterns.
于 2012-06-30T23:01:13.250 に答える