最後に編集されたのは 管理者
17.11.2020 | 歴史

Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17)

  • 15 読みたい
  • 28 現在読んでいるもの

発行元 やまもとこう .

    Download Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17) 本 Epub や Pdf 無料, Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17), オンラインで書籍をダウンロードする Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17) 無料で, 本の無料読書 Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17)オンライン, あなたは無料で、余分なお金を費やす必要なしに(PDF、epub)形式でここにこの本をダウンロードすることができます。以下のダウンロードリンクをクリックして、 Linux で C/C++ の足固め: メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17) 書籍のPDFまたはエパブ無料.

    商品基本情報

    • 著者:  小松 正樹
    • 発売日:  2019年06月30日
    • 出版社:  小松 正樹
    • 商品番号:  1230003297940
    • 言語:  日本語
    • 対応端末:  電子書籍リーダー,Android,iPhone, iPad,デスクトップアプリ

    エディションノート


    本書は C/C++ プログラマーが Linux で C/C++ プログラミングの応用練習をする際の副読本・実験ハンドアウトとして執筆しました。


    前半で Linux カーネルや glibc のソースコードリーディングによってメモリーとファイル関連のシステムとライブラリーを浅く広く理解し、後半で C++ アロケーターを作っていきます。


    ※注1:文体は端的でカジュアルな表現を心がけたので、ブログ調にアレルギーのある方は読まないほうが良いでしょう。


    システム環境


    - Ubuntu 18.04 (Windows 10 WSLは不可)

    - Linux カーネル 4.18.16 (UKUUでインストール)

    - glibc 2.7

    - GCC-8.2.0

    - GDB-8.1.0


    前提知識


    Unix の基本コマンドの実用的知識と C/C++ でのコーディングの経験が 1 年ぐらいあると望ましいです。


    対象となる読者


    本書は Linux 環境 C/C++ で色々と試行錯誤をしながらプログラミングしたい方向けです。


    必要な知識・スキル


    - Unix の基本コマンドの実用的知識

    - C言語/C++のプログラミング

    - 拙著「C++プログラミング(C++11/14/17)」のGDB・ライブラリーの章

    - 拙著「C/C++プログラマーが予備知識として学ぶIntel64/MIPS32アセンブリ言語プログラミング・コンピューターアーキテクチャー改訂第二版」のメモリーアーキテクチャの章


    正誤表


    Linux のファイルシステムの章の「 file (カーネル)」の項目内に「 kmalloc() / vmalloc() / alloc_pages() 等の関数で確保したメモリー領域」と途中で途切れた行がありますが、不要な文なので無視してください。


    筆者が内容にデバイスドライバを含めるか悩んでいた痕跡ではありますが、時期尚早と判断すべきところを、迷ったまま本文に該当する行を残してしまいました。


    時間の都合により初版ではデバイスドライバの説明は入れませんでしたが、簡単なハローワールドプログラムでも書いておけば、中途半端に文章が終わることは無かったので、次の版では大幅に加筆修正する予定です。


    Linux で C/C++ の足固め: Linux の メモリー/ファイル/mmap、malloc、C++ アロケーター


    序文

    対象となる読者

    前提知識

    開発環境

    Linux と POSIX C

    echo コマンド

    シェルの確認

    /dev ディレクトリー

    echo のリダイレクト

    アペンド

    リダイレクトのファイル記述子

    ファイル記述子間のリダイレクト

    exec (bash)

    ファイル記述子を閉じる

    読み書きファイル記述子

    /proc ディレクトリー

    /dev/shm ディレクトリー

    Linux (POSIX) のファイル入出力

    system 関数

    lseek()

    fopen / fread / fwrite / fclose 関数

    Linux でメモリー割り当て

    32 ビットプロセスのレイアウト

    malloc (cstdlib)

    malloc を strace で検証してみる

    ASLR と共有オブジェクト

    MALLOC(3) Linux プログラマーマニュアル

    brk / sbrk (unistd.h)

    gdb で sbrk() の解析

    strace によって brk() / malloc() のコールをチェック

    glibc から malloc() の基本構造を理解してみる

    malloc() の内部実装

    アリーナによるマルチスレッド対応

    アリーナオブジェクト( main_arena / malloc_state )

    ヒープのヘッダーオブジェクト( heap_info )

    チャンク( malloc_chunk )

    チャンクサイズ

    malloc_par

    top チャンク

    ビン

    未整理ビン / スモールビン / ラージビン

    ビンのインデックスの計算

    32 ビットアーキテクチャのビン

    64 ビットアーキテクチャのビン

    ビン・インデックスのまとめ

    ビンのチャンク連結

    ビンの初期化

    未整理チャンク( Unsorted Chunk )のマクロ

    トップチャンク( Top Chunk )のマクロ

    Binmap のマクロ

    tcache

    malloc() フリーチャンクの挙動

    malloc.c の内部マクロ

    チャンクを取り扱えるマクロ

    ファーストビンの解放

    malloc.c の内部関数

    malloc()

    _int_malloc() 関数

    free()

    calloc()

    realloc()

    alloca() 関数

    alloca() の使用法

    posix_memalign() / aligned_alloc()

    glibc-2.7 の内部実装

    アラインメントの仕組み

    アラインメントの最少サイズ

    大きめのアラインメント

    複数のアラインメントでの検証

    std::launder ( C++17 )

    std::aligned_storage ( C++11 )

    std::align ( C++11 )

    std::aligned_alloc ( C++17 )

    Linux カーネルのメモリーとファイルシステム

    Linux の仮想メモリーエリア・メモリー記述子

    メモリー記述子( mm_struct )

    仮想メモリー領域( vm_area_struct )

    ページ記述子( struct page )

    ページとブロック

    バッファー ( buffer_head )

    ブロック I/O ( bio )

    ページのキャッシュ

    スラブレイヤー・スラブアロケーター

    ファイルとメモリーのマッピング (mmap)

    ページとハードウェア

    ページキャッシュ ( struct address_space )

    Linux のファイルシステム

    カーネルヘッダー ( /usr/src/ )

    カーネルソースのアーカイブ

    super_block (カーネル)

    inode (カーネル)

    dentry (カーネル)

    file (カーネル)

    stat 構造体

    mmap

    mmap の使い方

    マルチタスクで使えると共有メモリーオブジェクト

    fork()

    fstat 関数を使ってファイルサイズを指定する場合

    MAP_PRIVATE の Copy-On-Write

    fork() で MAP_PRIVATE の Copy-On-Write を検証

    MAP_ANONYMOUS

    アノニマスマッピング

    /dev/zero

    (汎用ではない)カスタムアロケーターの設計

    アロケーターに必要な最低限の関数・オーバーロード・テンプレート

    std::allocator を使うだけのリファレンスアロケーター

    std::allocator を模したカスタムアロケーター

    スタック領域に割り当てるアロケーター

    配列内のアドレスの走査

    ヒープへのフォールバック付きスタックアロケーター

    コードをシンプルにする(内部バッファーのアドレスかのチェック)

    ヒープ領域のアドレスに割り当て

    malloc を使ってヒープに割り当て

    カスタムヒープアロケーター

    static オブジェクトはヒープっぽい領域に割り当てられるはず?

    アロケーターをスタティックメンバーにするとどうなるのか?

    アロケーターをセレクターで切り替え

    アロケータークラス内での複数の割り当て方針を切り替え

    C++ カスタムアロケーターの STL サポート(実験)

    C++ カスタムスタックアロケーターの用語の復習

    STL コンテナのサポート ( new / delete )

    STL サポートの適用対象

    STL コンテナ側のメモリー割り当て要件

    mmap() を使ったカスタムアロケーター

    ユーザーによるオブジェクト管理を前提にするカスタムページアロケーター

    カスタムアロケーターによるブロック管理

    (おまけ)アロケーターのポリモーフィズム

    メモリーリソースクラス

    std::experimental::pmr::memory_resource ( C++17 )

    memory_resource でアラインメントの実装(非実用的な実験です)

    ポリモーフィックアロケーター

    std::pmr::polymorphic_allocator ( C++17 )

    std::experimental::pmr::vector コンテナ ( C++17 )

    std::pmr::polymorphic_allocator の動作チェック

    ポリモーフィックアロケーターの実装

あなたも好きかもしれません

Linux で C/C++ の足固め メモリー/ファイル/mmap (kernel 4.18.16)、malloc (glibc2.7)、アロケーター(C++11/14/17) by やまもとこう ダウンロード PDF EPUB F2