**Goランタイムの理解:メモリ割り当て器**

2026/02/24 7:18

**Goランタイムの理解:メモリ割り当て器**

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

要約:
Goランタイムのヒープアロケータは、アリーナ、ページ、およびスパンを使用して、ゴルーチンスタックやその他のオブジェクトのメモリを管理します。アリーナとは、

mmap
(64‑ビットシステムでは約64 MB、Windows/32‑bitでは4 MB、WebAssemblyでは512 KB)で取得される大きな仮想アドレス空間です。アリーナ内では8 KBのページが基本的な割り当て単位となり、1 つ以上の連続したページが スパン を形成します。スパンは単一サイズクラスのオブジェクト専用に割り当てられます。各スパンにはフリーか使用中かを示す
allocBits
ビットマップと、ガベージコレクタによるライブオブジェクト追跡用の
gcmarkBits
ビットマップがあり、再利用時に遅延で掃除(スイープ)が行われます。

Go は 68 のサイズクラス(8 B–32 KB)を定義しており、それぞれに scan と noscan バリアントがあるため、合計 136 のスパンクラスになります。16 バイト未満のポインタを持たない極小オブジェクトは、複数のオブジェクトを単一の 16 バイトブロックに詰め込む特別な tiny アロケータで処理され、無駄が減少します。

割り当ては三段階の階層構造に従います:

  • per‑P
    mcache
    (ロックフリー高速パス)
  • per‑span‑class
    mcentral
    (短時間ロック、中程度のパス)
  • global
    mheap
    (グローバルロック、低速パス)

小規模な割り当てはローカルの

mcache
から提供され、大きめのオブジェクト(最大32 KB)はまず
mcentral
を経由し、最後に
mheap
に到達します。32 KBを超えるオブジェクトは両方のキャッシュをバイパスして直接
mheap
から割り当てられます。

バックグラウンドのスクレイジャー(scavenger)は定期的に未使用ページを OS に返却します(例:

MADV_DONTNEED
を介し)が、プロセスアドレス空間内ではマップされたままです。この設計はメモリ使用量を効率化し、GC の停止時間を短く保つことで、高性能な並列アプリケーションを構築する Go 開発者にメリットを提供します。

本文

Goランタイムのメモリ割り当て器 – 速習まとめ

割り当て器は、ヒープメモリを確保しガベージコレクタ(GC)と緊密に連携するランタイムの一部です。以下では、その設計と主要概念を簡潔に整理しています。


1. Go はデータをどこに置くか?

エリア用途生存期間
Stack関数内ローカル変数自動的に関数終了時に解放
Heap生成した関数が終わった後も残る必要があるデータ長期的に生存し、割り当て器+GC が管理

コンパイラは escape analysis を実行して、値がスタック上に留まるかヒープへ逃げるかを決定します。


2. Go は頻繁に OS コールを避ける理由

  • mmap
    VirtualAlloc
    等のシステムコールはコストが高い。
  • ランタイムは 大きなブロック(アリーナ) を事前確保し、そこからメモリを割り当てます。
  • アリーナが枯渇したときだけ OS へ新しいアリーナの要求を行います。

3. アリーナ内のメモリレイアウト

レベルサイズ役割
Arena64 MB(典型的な 64‑bit)OS から取得した大きなブロック
Page8 KBアリーナ内での基本単位
Span1 ページ以上、同一オブジェクトサイズ専用固定長スロットを保持
Slot
objectSize
バイト
ユーザーへ返却される個別割り当て

各 Span は二つのビットマップを持ちます:

  • allocBits
    – スロットが使用中かどうか
  • gcmarkBits
    – GC が生きているオブジェクトをマーク

4. サイズクラスとスパン

クラスオブジェクトサイズ(バイト)スパンページ数スパンあたりのオブジェクト数
1811024
6832 KB3–101–256
  • オブジェクトは最も近いサイズクラスへ丸められます。
  • scannoscan フラグで各サイズクラスを分け、合計 136 の スパンクラス が存在します。

5. タイニーオブジェクト

  • 16 バイト未満でポインタを含まないものは、単一の 16‑バイトブロックに詰められます。
  • bool や int8 等の非常に小さい値でも無駄を最小化します。

6. 割り当て階層

レベルスコープロック目的
mcacheP(プロセッサ)ごと無しローカルスパンプールからロックフリーで高速に割り当て
mcentralスパンクラスごと短時間mcache のスパンを補充、細粒度ロックを使用
mheapグローバル高コストページ/アリーナが不足した際に新規確保
  • 32 KB を超える大きなオブジェクトは
    mcache
    mcentral
    をバイパスし、直接
    mheap
    に委ねられます。

7. 割り当てフロー(簡易版)

  1. ゼロサイズ割り当て → グローバル
    zerobase
    を返却
  2. タイニー割り当て → 現在のタイニーブロックに詰めるか、mcache から新規取得
  3. 通常割り当て(16 B–32 KB)
    • サイズを丸めてスパンクラスへ変換
    • mcache を検索;空きスロットがあれば返却
    • スパンが満杯なら
      mcentral
      に移動し、新規スパンを要求
    • mcentral
      が空の場合は
      mheap
      からページ取得 → 新しいスパン作成
  4. 大きな割り当て → 必要な正確なページ数を
    mheap
    で直接確保

8. ガベージコレクタとの相互作用

  • GC は
    gcmarkBits
    に生存オブジェクトをマーク
  • マーク後、割り当て器は
    allocBits
    gcmarkBits
    を入れ替え、未マークのスロットを解放
  • スワッピング(スパンの再利用時に遅延で行われる)でスパンがクリアされます。

9. OS へメモリを返却

  • scavenger ゴルーチンは定期的に未使用ページを OS に返却します (
    MADV_DONTNEED
    を Linux 上で実行)。
  • ページはアドレス空間内にマップされたままですが、アイドル状態の物理メモリとして再利用可能です。

10. クイックリファレンス

ファイル内容
malloc.go
コア割り当てロジック(
mallocgc
mheap.go
アリーナとページ管理
mcache.go
P ごとのスパンキャッシュ
mcentral.go
スパンクラスごとのプール

まとめ
Go の割り当て器は、事前に大きなアリーナを確保し、それをページ・スパンへ分割して管理します。ロックフリーのキャッシュを利用することで高速化を図りつつ、各スパンには二重ビットマップ(

allocBits
gcmarkBits
)を持たせ GC と協調しています。最後に scavenger が未使用ページを OS に返却し、メモリの効率的な再利用を実現します。

同じ日のほかのニュース

一覧に戻る →

2026/02/27 7:42

**ダリオ・アモデイ氏からの戦争省との協議に関する声明** - 当社は、共同事業に関し戦争省と継続的な連絡を保っております。 - 主な議論点は次の通りです。 - **戦略的一致**:科学的整合性を損なわずに国防優先事項を支える研究目標を確実にすること。 - **資源配分**:共同プロジェクト用の資金と物流サポート、専門施設へのアクセスについて交渉すること。 - **倫理的監視**:二重利用技術の誤用を防止しつつ革新を促進する明確なガイドラインを策定すること。 - 今後の方針は次の通りです。 - マイルストーン、リスク評価、コンプライアンス措置を詳細に示したプロジェクト提案書を提出します。 - 戦争省監査委員会との定期的な進捗レビューをスケジュールします。 - 全てのコミュニケーションとデータ共有契約において透明性を維持し続けます。

## 日本語訳: --- ## 要約 Anthropic は、米国の国家安全保障機関(戦争省、諜報機関、国立研究所、その他カスタム顧客)に Claude 言語モデルを導入しつつ、国内大規模監視や完全自律兵器を禁じる厳格な使用保護策を維持しています。 Claude は、情報分析・モデリング&シミュレーション、運用計画、サイバー作戦といったミッションクリティカルタスクに活用されています。システムの保護のため、Anthropic は自発的に収益を削減し、中国共産党(CCP)に関連する企業からの利用をブロックし、CCP 支援のサイバー攻撃をモデルから遮断しています。同社はまた、高度チップへの強力な輸出規制を推進して民主的 AI 優位性を維持することも主張しています。 Anthropic は、民主主義を損なうと考える二つの使用ケース(国内大規模監視と完全自律兵器)を支持しません。現在の無証拠データ収集慣行下で基本的自由が脅かされるリスクや、未だ不安定な完全自律兵器は受け入れられません。Anthropic は自律兵器信頼性向上のための研究開発を提供してきましたが、戦争省はこの提案を受け入れていません。 戦争省はこれらの保護策を防衛生産法下で「サプライチェーンリスク」とみなし、残存する限り削除を脅迫しています。Anthropic は良心的にそれらを撤廃できないと主張し、保護策を維持したまま同省へのサービス継続を求めています。代替としては、軍事作戦や計画の中断なしに別プロバイダーへ円滑な移行を支援することも提案しています。 オフボーディングされた場合でも、Anthropic の技術は戦争省が必要とする限り広範囲に提供され続けます。業界全体では AI 輸出規制、サプライチェーンリスク評価、国内監視に関するプライバシー保護策への注目が高まる可能性があります。

2026/02/27 7:09

スマートフォン市場は2026年に13%減少し、メモリ不足による史上最大の落ち込みとなります。

## Japanese Translation: --- ## Summary 世界のスマートフォン出荷台数は、2026年に前年比12.9 %減少し、**1億1200万台**に落ち込み、10年以上ぶりの最低年間ボリュームとなると予測されています(IDC Worldwide Quarterly Mobile Phone Tracker)。この下落はメモリチップ不足が激化したことによります。IDC は、メモリチップの希少性が部品コストを押し上げ、マージンを圧迫したため、11 月の予測から大幅に見直しました。特に低価格帯 Android ベンダーへの影響が顕著です。 Apple と Samsung は危機を乗り切るポジションにあり、競争が激化する中で市場シェアを拡大できる可能性があります。シニアリサーチディレクターのナビラ・ポパル氏は、構造的なリセットと統合が進むと予測しています。小規模プレイヤーは退出し、高級ブランドが拡大すると見込まれます。スマートフォンの平均販売価格(ASP)は 2026 年に14 %上昇し、約 **$523** になると予想されています。10 ドル未満セグメント(1億7100万台)は永久的に非経済的になります。 地域別影響: - 中東・アフリカ –20.6 % YoY、 - 中国 –10.5 %、 - アジア太平洋(日本と中国を除く)–13.1 %。 市場は 2027 年に2 %程度で回復し、その後 2028 年には5.2 %のリバウンドが見込まれます。メモリ価格は 2027 年中頃に安定すると予想されますが、以前のレベルを上回る可能性があります。 IDC Tracker 製品は、世界のテック市場に関する詳細な市場規模、ベンダーシェア、および予測情報を提供します。これらは半年ごと、四半期ごと、月次で更新されます。詳細については、508‑988‑7984 または jkliem@idc.com までジャッキー・クリエム(Jackie Kliem)にお問い合わせください。IDC は、100 カ国以上で 1,000 人を超えるアナリストが在籍するグローバルなテクノロジーインテリジェンスプロバイダーです。

2026/02/27 3:12

**Claude Codeが選ぶポイント** - **明確な目的** – コーディングを始める前に問題点と目標を設定する - **読みやすい構造** – 意味のある名前、統一したインデント、モジュール化された関数を使用する - **ミニマリズム** – コードは簡潔に保ち、使われていないインポートや変数を削除する - **堅牢性** – エラーハンドリングと入力検証を組み込む - **ドキュメント化** – 明らかでないロジックについては簡潔なコメントを付ける - **テスト** – 各コンポーネントが期待通りに動作することを確認するユニットテストを書く

## Japanese Translation: **(すべての主要ポイントを統合)** 本研究は、Claude Code を 2,430 件の実際のリポジトリクエリに対して、3 つのモデル(Sonnet 4.5、Opus 4.5、Opus 4.6)と 4 種類のリポタイプで評価し、全体的なツール抽出率を **85.3 %** に達しました。支配的な挙動は「build vs buy」であり、**20 カテゴリ中 12 カテゴリ** で Claude Code はカスタム/DIY ソリューション(合計 252 件)を優先し、単一の推奨ツールを上回っています。ツールが選択されるとき、モデルは決定的な好みを示します——**GitHub Actions 94 %**、**Stripe 91 %**、**shadcn/ui 90 %**。 デフォルトのスタック選択は JavaScript に大きく偏っています:状態管理には **Zustand (57/88 選択)**、可観測性には **Sentry (101/160 選択)**。市場シェアが大きいツールはほとんど注目されません;たとえば API レイヤーの決定では、外部ライブラリよりもフレームワークネイティブなルーティングが選ばれ、パッケージマネージャーは主要な選択肢としてほぼ現れません。 最新性の勾配が明らかです:新しいモデルほど新しいツールを好みます——JS ORM の選択で **Drizzle が Prisma を置き換え**、ジョブキューでは **Inngest が BullMQ を上回ります**。デプロイメントの決定はほぼ完全にスタック駆動です:JavaScript プロジェクトには **Vercel**、Python/FastAPI には **Railway**;従来型クラウドプロバイダーは主要な選択肢としてゼロです。代替デプロイメントオプションの出現頻度は次の通りです:**Netlify 67 %**、**Cloudflare Pages 30 %**、**GitHub Pages 26 %**、**DigitalOcean 7 %**。 すべてのモデルで合意率は高く、**20 のエコシステム内カテゴリ中 18 カテゴリ** がコンセンサスを示しています。残りの 5 カテゴリでは実際にクロス言語間の不一致が見られます(例:ORM、ジョブ、キャッシュ、リアルタイム)。Python 認証では Claude Code は一貫して **JWT + bcrypt をゼロから** 実装し、機能フラグでは LaunchDarkly の推奨よりも環境変数を使用したカスタム構成システムを構築します。 研究は Sonnet 4.6 が 2026 年 2 月 17 日にリリースされたことを指摘し、結果はこの新モデルで再実行され、新しいリリースがさらに新興ツールを好むかつつ build‑over‑buy の姿勢を維持するかどうかを評価します。カテゴリ別の詳細抽出率とクロスリポジトリ一貫性メトリクスは、より深い市場インパクト分析に利用可能です。 この要約はすべての主要なポイントを反映し、不適切な推測を避け、研究結果の明確で読みやすい概要を提示しています。

**Goランタイムの理解:メモリ割り当て器** | そっか~ニュース