タグ

ブックマーク / aki-yam.hatenablog.com (2)

  • あるシンボルが どのオブジェクトファイル/共有オブジェクトに含まれているか検索するスクリプト - akihiko’s tech note

    プログラミングしていると,あるシンボル(変数名,関数名,クラス名,etc.)がどのオブジェクトファイル(or アーカイブファイル)や共有ライブラリで定義されているか,調べたいことがある(どのファイルをリンクすればいいかわからないときなど).通常はシンボル名でググればよろしい.だが,稀に,ググるのでは解決できないことがある.そのような場合の対処法として,無理矢理 /usr/lib や /lib にあるライブラリファイルを検索する方法を紹介する. ライブラリの種類 予備知識なので,読み飛ばしても可. プログラムをコンパイルして生成されたオブジェクトファイル (*.o) をコマンド ar でアーカイブすると,アーカイブファイル (*.a) ができる.これが,静的ライブラリ (static library).実行ファイルの生成時に静的にリンクされるため,実行時にはアーカイブファイルは不要. 一方,

    あるシンボルが どのオブジェクトファイル/共有オブジェクトに含まれているか検索するスクリプト - akihiko’s tech note
    gologo13
    gologo13 2012/09/10
    静的ライブラリと共有ライブラリの違いについて。nm コマンドで静的ライブラリ or 共有ライブラリに含まれているシンボル名を取得することが出来る。
  • メモリの二重解放回避テク - akihiko’s tech note

    メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやってしまいがちである.ここでは二重解放によって発生する問題を解説する. 結論から言うと,メモリを解放した後 (delete p1;),ほかの用途でメモリを確保し (p2=new T;),たまたまそれが解放したメモリと同じアドレスに割り当てられてしまった場合 (p1==p2),最初のメモリを二重解放すると (delete p1;),新しく確保したメモリ (p2) が解放されてしまう.この結果,新しく確保したメモリにアクセスすると値が書き換えられていたり,セグメンテーションフォルトが発生する場合がある.プログラマはまず,新しく確保したメ

    メモリの二重解放回避テク - akihiko’s tech note
    gologo13
    gologo13 2010/04/29
    動的に確保されたオブジェクトをメンバに含むクラスの場合,コピーコンストラクタは重要
  • 1