tcmalloc・とは?初心者にもわかる高速なメモリ割り当てのしくみ共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
tcmalloc・とは?初心者にもわかる高速なメモリ割り当てのしくみ共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


tcmallocとは何か

tcmallocはThread-Caching mallocの略で、Googleが開発したメモリ割り当ての仕組みです。主な目的は、複数のスレッドが同時にメモリを使う場面での処理を速くすることです。従来の malloc はスレッド間で競合が起きるとロックを多く取り、処理が遅くなりがちでした。これに対して tcmalloc は各スレッドに小さなキャッシュを用意し、頻繁な割り当てをその場のキャッシュから実行します。結果としてロックの回数が減り、全体の実行速度が上がることが多くなります。

この仕組みは特にマルチスレッドのアプリケーションで効果を発揮します。サーバー系のプログラムや大規模なゲームエンジンなど、同時に多くのメモリ操作が発生する場面でよく使われます。tcmalloc は一般的な malloc の置き換えとして動作することが多く、既存のコードを大きく変更せずに導入しやすい点も魅力です。

tcmalloc の仕組みをくわしく

tcmalloc のポイントは主に三つです。第一はスレッドキャッシュと呼ばれる各スレッド専用の領域です。ここに小さな割り当てを素早く行い、解放も同じスレッド内で完結します。第二は中央キャッシュです。大きな割り当てや複数スレッド間で共有されるメモリをここが受け持ち、全体の再利用を効率化します。第三は arenas と呼ばれる領域分割の考え方です。これによりメモリの断片化を抑えつつ公平に割り当てを分配します。

要点だけを覚えておくと良いでしょう。 スレッドキャッシュを使うと短い割り当ては速くなります。一方で中央キャッシュの設計次第ではメモリの総量が増えることもあります。導入時には メモリ使用量の変化 を確認することが大切です。

使い方と導入のコツ

使い方は二つの一般的な方法があります。第一はライブラリとして組み込み、リンク時に tcmalloc を指定する方法です。ビルドコマンドの末尾に -ltcmalloc を追加します。第二は実行時に読み込ませる方法です。環境によっては LD_PRELOAD という仕組みを使い libtcmalloc を起動時に読み込ませます。具体例としては実行前に環境変数を設定してから起動します。

導入時の注意点としては、必ずしも全てのプログラムで速くなるとは限らない点です。小規模なプログラムや単一スレッドのプログラムでは効果が薄いことがあります。多くのスレッドが存在する大規模なサーバーやゲームエンジンでは効果が高くなる傾向があります。導入の判断には実際の負荷でのベンチマークをおすすめします。

表で要点を整理する

比較項目標準 malloctcmalloc
競合の回避ロックが発生しやすいスレッドキャッシュで回避
速度の目安環境により差が出る多くの場合速い
メモリのオーバーヘッド少なめキャッシュ分の追加あり

まとめ

総じて tcmalloc はマルチスレッド環境でのメモリ割り当てを効率よく行う選択肢です。導入前には効果とメモリ量の変化を確認し、実際の運用でのパフォーマンス改善を見極めましょう。


tcmallocの同意語

TCMalloc
Thread-Caching Malloc の略称で、Google が開発した高速なメモリ割り当てライブラリ(malloc の実装のひとつ)です。
Thread-Caching Malloc
正式名称。スレッドごとにキャッシュを使って高速にメモリを割り当てる malloc の実装です。
Googleのtcmalloc
Google が提供する tcmalloc の別称。Google 製の高速メモリ割り当てライブラリを指します。
gperftoolsのメモリアロケータ
gperftools に含まれるメモリアロケータの一つとしての tcmalloc のこと。
tcmallocライブラリ
tcmalloc を含むライブラリ群のうち、メモリアロケータ部分を指す名称です。
高速メモリアロケータ
tcmalloc の特徴を表す総称で、メモリ割り当てを速くする設計のことです。
スレッドキャッシュ付き malloc
スレッドごとにキャッシュを持って割り当てを行う、tcmalloc の特徴を表す表現です。
TCMallocアロケータ
TCMalloc の別称・専門用語としてのアロケータを指します。
tcmalloc allocator
英語表記の名称。tcmalloc のアロケータ機能を意味します。
Thread-Caching Malloc アロケータ
正式名称を英語と日本語で組み合わせた表現。スレッドキャッシュ付き malloc のアロケータを指します。

tcmallocの対義語・反対語

標準の malloc (glibc など)
tcmallocに対する一般的な対比。デフォルトで使われるメモリアロケータで、スレッドキャッシュ最適化や小さなオブジェクトの高速化には及ばないことがある。
遅いメモリアロケータ
割り当て処理の速度が低く、アプリケーションの応答性やスループットを低下させるようなアロケータ。
シングルスレッド向けアロケータ
複数スレッドでの同時割り当てを前提としていない設計のアロケータ。並列環境での性能が低下しやすい。
スレッドセーフではないアロケータ
複数スレッドから同時に利用すると競合が発生しやすい設計のアロケータ。
断片化が起こりやすいアロケータ
長時間の利用でメモリの断片化が進みやすい特徴を持つアロケータ。
オーバーヘッドが大きいアロケータ
管理情報や内部データ構造のオーバーヘッドが大きく、全体のメモリ使用量が増えるタイプ。
従来型の malloc(デフォルトの実装)
tcmallocの特徴である低フラグメンテーションや高速化に対し、従来型はこれらの利点が少ないことがある。
ガーベジコレクション型の割り当てライブラリ
GCを使う言語環境向けの割り当てで、即座の解放や断片化対策が異なる設計のアロケータ。
手動メモリ解放前提のアロケータ
解放を厳密に手動で管理するアロケータで、tcmallocのような自動解放・最適化と相性が悪いことがある。
プラットフォーム最適化が限定的なアロケータ
特定のOS/アーキテクチャでしか最適化されていない場合、他環境での性能が劣ることがある。

tcmallocの共起語

gperftools
Google Performance Tools の略称。tcmalloc を含むメモリ管理・プロファイリング機能群の総称。
google performance tools
gperftools の正式英語名。tcmalloc などのツールを指すことが多い。
memory allocator
動的メモリを割り当て・解放する機能を提供するライブラリ。tcmalloc はこの実装の一つ。
malloc
C/C++ の標準的なメモリ割り当て関数。tcmalloc は malloc の実装を置き換えたり最適化したりする。
glibc malloc
glibc が提供する malloc の実装。Linux のデフォルト環境でよく使われる。
jemalloc
別の高性能メモリ割り当てアルゴリズム/実装。tcmalloc と比較対象として語られる。
central free list
複数のスレッドキャッシュが共用する空きリスト。tcmalloc の要素の一つ。
thread cache
各スレッドが自分用に確保したメモリを再利用するキャッシュ。tcmalloc の特徴。
heap profiling
ヒープの割り当て・解放の詳しい履歴を分析する機能。gperftools に含まれる。
memory profiling
全体のメモリ使用状況を可視化・分析する手法。tcmalloc/gperftools の関連領域。
pprof
性能プロファイリングツール。gperftools との連携で使われることがある。
perftools
Google Performance Tools の略称。tcmalloc を含むツール群の総称。
malloc_stats
現在の malloc の統計情報を表示する機能。パフォーマンス分析に役立つ
allocation speed
メモリ割り当ての速度。tcmalloc の強みのひとつとして語られる。
allocation overhead
割り当て処理のオーバーヘッド。設計上のトレードオフとされる話題。
fragmentation
メモリ断片化の現象。割り当て・解放パターンによって発生する。
memory footprint
プロセス全体のメモリ使用量。tcmalloc の導入で変化する可能性。
large pages
大ページ機能を活用する話題。大容量の割り当てを効率化する設定。
heap checker
ヒープの誤用を検出・報告するツール。gperftools の一部。
calloc
初期化付きの割り当て関数。tcmalloc はこれにも対応している。
memory allocator performance
メモリ割り当て実装の性能比較。tcmalloc と他実装の比較で語られる。
runtime profiling
実行時のパフォーマンス・メモリ挙動を追跡する手法。
profile data
プロファイルデータ。tcmalloc/gperftools が収集する情報。

tcmallocの関連用語

tcmalloc
Google が提供する高速なメモリアロケータ。マルチスレッド環境での割り当てを効率化し、アプリのメモリ性能を改善することを目的として設計されています。
gperftools
Google Performance Tools の略。tcmalloc のほかヒーププロファイラ・CPUプロファイラなど、パフォーマンス分析ツールのセットです。
malloc
C/C++ の標準的なメモリ確保関数。tcmalloc はこの API の実装・拡張として動作します。
free
確保したメモリを解放する関数。メモリ管理の基本操作の一つです。
new
C++ のメモリ確保演算子。オブジェクトを生成する際に使います。
delete
C++ のメモリ解放演算子。new で作成したオブジェクトを破棄します。
per-thread cache
各スレッドが独自のメモリブロックをキャッシュして、再利用を速く行う仕組みです。
central free list
複数スレッド間で共有される中央の解放済みブロックリスト。大きなブロックの再利用を効率化します。
size classes
異なるサイズのブロックを事前に分類して管理する考え方。適切なサイズのブロックを素早く割り当てられます。
memory fragmentation
長時間の運用で生じるメモリの細切れ現象。アロケータ設計で抑える努力がなされています。
heap profiler
ヒープのメモリ使用状況を可視化・解析するツール。どのオブジェクトがどれだけのメモリを占有しているかを把握できます。
cpu profiler
プログラムのCPU使用時間を分析するツール。ボトルネック候補を特定するのに有用です。
heap checker
メモリリークや二重解放など、ヒープに関する問題を検出するデバッグ機能。
jemalloc
別の人気の高いメモリアロケータ。tcmalloc の代替として比較対象に挙げられることが多いです。
ptmalloc
GNU C ライブラリの malloc 実装の系統名。tcmalloc との比較対象としてよく挙げられます。
size-class allocation
サイズクラス化割り当て。小さなブロックを事前定義のクラスに振り分け、効率的に確保します。
fragmentation-aware allocation
断片化を抑えることを意識した割り当て戦略のこと。
virtual memory / mmap
大きなブロックの確保時に仮想メモリ(mmap など)を使うことがあり、OSの挙動と連携します。
Linux / Unix
tcmalloc は主に Linux/Unix 系の環境で使われることが多いライブラリです。
Windows
公式サポートは限定的。主に Unix 系環境向けに設計されています。
tcmalloc_minimal
機能を絞った軽量版の実装や派生版が用意されることがあります。

tcmallocのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14297viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2381viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1057viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1016viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
909viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
885viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
816viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
808viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
786viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
769viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
703viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
659viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
579viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
554viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
542viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
541viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
499viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
475viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
461viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
442viws

新着記事

インターネット・コンピュータの関連記事