2006年4月28日

実行時のスタックの消費量を調べる

先日の記事では checkstack.pl を用いて個々の関数がどのくらいスタックを消費するか調べる方法を紹介しました。今回は、実行時の実際のスタック消費量を調べてみます。

続きを読む...
投稿者 satoru : 固定リンク | このエントリーを含むはてなブックマーク  

2006年4月24日

checkstack.pl で関数のスタック消費量を調べる

Linux カーネルのソースコードに付属する checkstack.pl を使うと、C/C++ のプログラムの関数のスタック消費量を調べることができます。checkstack.pl は objdump -d のディスアセンブルの出力からスタックポインタの操作をパターンマッチしてスタックの消費量を計算しています。

続きを読む...
投稿者 satoru : 固定リンク | このエントリーを含むはてなブックマーク  

2006年4月23日

子プロセスに LD_PRELOAD を継承させない

Linux で LD_PRELOAD 環境変数を使うと共有オブジェクト (共有ライブラリ) のプリロードを行うことができます。通常、LD_PRELOAD が設定されている間は、あるプロセスから呼んだ子プロセスも同様にプリロードを行いますが、場合によっては子プロセスにはプリロードさせたくないときもあります。

続きを読む...
投稿者 satoru : 固定リンク | このエントリーを含むはてなブックマーク  

2006年4月22日

Cのポインタを整数に変換する

Cのポインタを整数に変換したいときがあります。このとき問題になるのは、ポインタのサイズが int と同じとは限らないということです。たとえば、 x86_64 の 64ビットのバイナリでは sizeof(int) = 4, sizeof(void *) = 8 となります。ポインタと同じサイズの整数を使いたい場合は C99 で導入された stdint.h で提供される intptr_t または uintptr_t を使います。

続きを読む...
投稿者 satoru : 固定リンク | このエントリーを含むはてなブックマーク  

2006年4月 3日

Doug Lea の malloc (dlmalloc)

小さなオブジェクトを大量に new しまくるプログラムを C++ で書いたところ、処理時間の多くが malloc() に費やされていることがわかりました。このような場合、自前でメモリ管理を行って最適化するという方法がありますが、なかなか大変です。

そこで、安易に高速な malloc に置き換えてみようということで、 Doug Lea の malloc (通称 dlmalloc) の最新版を試してみました。

続きを読む...
投稿者 satoru : 固定リンク | このエントリーを含むはてなブックマーク