タグ

ブックマーク / www.wagavulin.jp (3)

  • valgrindが検出するメモリリークの種類 - wagavulin's blog

    C/C++のメモリリークチェックツールと言えばvalgrindが有名だが、メッセージの詳細を日語で説明しているサイトはあまりないようなので調べてみた。 valgrindは、mallocやnewで確保されたメモリ領域がポインタによって辿れるかどうかをチェックすることでメモリリークを検出する。以下の例を見てみよう。 char *g_ptr; void func(){ char *p = new char[32]; // (A) } int main(){ func(); } main関数から始まり、そこからfuncが呼ばれ、現在 (A) の位置にいるとしよう。このとき、メモリ上にはmain関数とfunc関数で定義された変数があり、また、グローバル変数であるg_ptrも有効な状態で存在している。func関数が抜けると変数pは無効になる。 このpやg_ptrのようなデータのことをroot-set

    valgrindが検出するメモリリークの種類 - wagavulin's blog
  • Linux共有ライブラリの簡単なまとめ - wagavulin's blog

    Linuxで共有ライブラリ(*.so)を作るようになったのでちょっと勉強してみた。今までは使うだけだったので、以下のようなことは知っていた。 作るときはgccの-sharedオプションを使う。 使うときはgccの"-lライブラリ名"でリンクするライブラリを指定する。 リンク時のライブラリ探索パスは-Lオプションで指定する。 実行時のライブラリ探索パスは/etc/ld.so.confに書いてあるディレクトリ。環境変数LD_LIBRARY_PATHでも指定可能。 ライブラリを作るときは、.cから.oを作るときに-fPICをつけるといいらしい。 新しくライブラリを入れたときはldconfigするといいらしい。 逆に今まであまり知らなかったこと。 ほとんどのライブラリはlibhoge.so, libhoge.so.1, libhoge.so.1.1のように3つくらいのファイルがあり、libhoge

    Linux共有ライブラリの簡単なまとめ - wagavulin's blog
  • CMakeを使ってみた(1)経緯と簡単なアプリケーション - wagavulin's blog

    はじめに CMakeを調べた経緯 CやC++でプログラムを書くときは普通何らかのビルドツールを使う。Unix/LinuxならMakeが多いだろう。Makefileにビルド手順を書くわけだ。一方WindowsでVisual Studio(以下VS)を使うときはVS上でビルドの設定を行い、その結果はプロジェクトファイル(.vcproj)に保存される。 そのため、Unix/LinuxWindows両方に対応しようとすると、例えばソースファイルを追加するたびにMakefileとVSのプロジェクトファイルの両方を修正することになる。さらにEclipse CDTでも開発できるようにしようと考えたり、あるいは古いVS用のプロジェクトファイルが必要になったりすると、サポートするビルド環境がどんどん増えていく。 当然管理も面倒になり普段使わないものが段々放置され、ついにはビルドできなくなる。そしてそのこと

    CMakeを使ってみた(1)経緯と簡単なアプリケーション - wagavulin's blog
  • 1