newした位置が解るnew が以外と人気ですが、 泥臭くない方法で(寧ろハイパー泥臭い方法で)、 newの中で自分を呼び出した関数のアドレスをスタックかレジスタから引っ張ってきて、 それを保持しておく、というワザもあります。 ポータビリティは最低ですが、インラインアセンブリで書くと良いです。 mapファイルか、 デバッガのシンボル参照なんかを使うと呼び出しもとの確定が簡単です。 この2つの合わせ技は強力です。
newした位置が解るnew が以外と人気ですが、 泥臭くない方法で(寧ろハイパー泥臭い方法で)、 newの中で自分を呼び出した関数のアドレスをスタックかレジスタから引っ張ってきて、 それを保持しておく、というワザもあります。 ポータビリティは最低ですが、インラインアセンブリで書くと良いです。 mapファイルか、 デバッガのシンボル参照なんかを使うと呼び出しもとの確定が簡単です。 この2つの合わせ技は強力です。
※ 更新履歴 ※ 2017/11/03 ・sp.8章追加 2017/10/11 ・配布しているプロジェクトをVisualStudio2017に更新(それにまつわる説明も更新) 2015/09/12 ・s.3章 Androidのようなボタンの作り方(C++) 追加 2013/09/02 ・VisualC++2012のプロジェクトを追加 2013/02/23 ・d3.5章追加 2013/02/20 ・d3.1章追加 ・d3.2章追加 ・d3.3章追加 ・d3.4章追加 2013/01/19 ・sp3章追加 ・sp4章追加 ・sp5章追加 ・sp6章追加 ・sp7章追加 2012/06/23 ・3.14章追加 2012/06/16 ・sp1節追加 ・sp2節追加 2012/02/11 ・d6節追加 2011/11/10 ・h11章追加 2011/10/31 ・s1章追加 ・s2章追加 2011/
世田谷の某所から原宿まで自転車通勤しているのですが、そろそろ寒くなってきたので電車に切り替えようかと悩み中のmikioです。今回はTokyo Cabinetのスクリプト言語バインディングについて述べます。 スクリプト言語バインディングとは TCはC言語で実装されたライブラリで、C言語(C89、C99)およびC++言語のプログラムから利用することができます。CやC++は各種の計算処理やシステムコールの呼び出しを直接的に記述できるので高速に動作するプログラムを作ることができる反面、ポインタ演算やメモリ管理などで致命的なバグを潜ませやすいので非常に注意深くコーディングを進めなければいけません。つまり、プログラムの実行速度は速いが、開発速度は遅いということです。 それに対して、PerlやRubyをはじめとするいわゆるスクリプト言語は、実行速度はCやC++に劣るものの、高水準かつ直感的な文法と強力な
前回の記事って本当は、Java > Cという話をしたかったんですよ。ベンチマークって本当に難しいですね! というわけで、今回はJava > Cという話をみつけました。フィボナッチ数列ってやつです。 まずはCバージョンを書いてみましょう。 1 #include <stdio.h> 2 3 int fib(int n) { 4 if(n < 2) 5 return n; 6 else 7 return fib(n - 2) + fib(n - 1); 8 } 9 10 int main() { 11 printf("%d\n", fib(40)); 12 } 実行結果は、下記の通りです。 % cc fib.c -o fib % time ./fib 102334155 ./fib 3.30s user 0.01s system 98% cpu 3.361 total 次は、Javaバージョン
C 言語にフォーマルセマンティクス (操作的意味論) を与えたとかいう論文 An abstract dynamic semantics for C (1997) を,いきなり読むのは厳しそうだったので,そもそも dynamic semantics ってなんじゃい ! とテキトーに検索してみたら. C 言語のための現実的なポインタ解析 という日本語の論文が見つかったので (直接的にはあんまり関係ないけど) ちょっと読んでみた.あんまりちゃんとは読んでないけど… ポインタが,どこのメモリ領域を指すか,みたいな解析には抽象実行というテクニックを使うのが普通らしい. Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of
Created: Kazuki Ohta, 2006/06/14 Last Update: Kazuki Ohta, 2006/06/14 「write(2)の正しい使い方」と同じく、OS演習でやった事の延長線の記事を書いてみる。お題は「UNIX上で大規模ファイルを最速でコピーする方法」だ。一般的に、UNIXでファイルをcopyする際には以下のような方法が有る。 read -> write read -> write with posix_fadvice mmap -> mmap -> memcpy -> fsync mmap -> mmap -> memcpy -> fsync with madvise mmap -> write mmap -> write with madvise read, write, mmap辺りは良いとして、posix_fadviseというシステムコールが有
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く