Linuxメモリメモベース

2344 ワード

システム
  • 1. メモリ管理
  • 2. ファイルディレクトリ
  • 3. IO
  • 4. プロセス管理
  • プロセス作成
  • プロセス制御
  • プロセス通信
  • プロセス同期
  • 5. スレッド管理
  • スレッド作成
  • スレッド同期
  • スレッド通信
  • 6.適用
  • ネットワーク
  • データベース
  • UI
  • XML処理
  • 分布式とミドルウェア(Tuxedo/Corba/MQ)
  • web service
  • OpenGL


  • メモリ管理
  • ハードウェア階層
            
    
  • カーネル階層
          
         
    
  • 言語階層
    c:malloc
    c++:new delete
    
  • データ構造
      STL(        ,          )
          
    
  • Linuxのメモリの説明
    /proc/${pid}/               ,    ,            ,       
    
    ps aue(a->all ,u->user, e->   )
    4K     
          4G
    ldd     ,  ldd Tst
    
    linux-gate.so.1 => (0x00c95000)
    libc.so.6 => /lib/libc.so.6 (0x00674000)
    /lib/ld-linux.so.2 (0x0064e000)
    
  • 実際に作成されたプログラムは/lib/ld-linuxである.so.2これは実行可能なプログラムであり、ユーザプログラムのアドレスを指し、プログラム
  • を実行する.
     = 
    
  • どのプログラムも08048000で始まる
  • です.
    08048000-08049000      r-xp
    08049000-0804a000 bss     rw-p  (    )
    0839d000-083be000 heap    rw-p
    b7fab000-b7fae000
    bfb15a44      stack
    
    
  • スタックは上から下へ、スタックは下から上へ
  • 結論:
  • 1.メモリは4つの領域に分かれています
  • 1.(コード領域、グローバル定数const)、
  • 2.(グローバル変数、ローカルstatic変数)bss-BlockStartedbySymbol,
  • 3.(malloc)スタックheap,
  • 4.(局所定数、auto変数、関数パラメータ)スタックstack
  • 2.
    int *p1 = malloc(sizeof(int)), *p2 = malloc(sizoef(int));
    
    
    p 1とp 2はいずれもスタック空間を開いているが、それぞれ16個のByteがあり、スタックの管理はチェーンテーブルである.
  • 1.1つは前のアドレスを指す
  • 2.1つは後者のアドレスを指す
  • 3.1つは現在の空間アドレス、
  • 4.1つは、現在のスペースのサイズを管理し、
  • に境界を越えてアクセスしないことです.
  • 3. C++
  • 1.malloc,new,new[]区別
  • 2.realloc,new()位置決め割当空間
  • 3.calloc,new[]の関係,
  • 4.freeとdelete,delete[]の違い
  •     1.new     malloc
          :new  malloc ,       (    ,        0,UDT  ,        )
        
        2.delete  free  
          :delete       (    0),     free
        3.new new[]
          :new            
              new[]             
              
        4.delete delete[]    new  ,         ,     
    
        char a[20];
    int *p = new(a) int;
     p      a    int 4