タグ

CとC++に関するcrafのブックマーク (141)

  • WebKit について (コード) - 2010-01-02 - 兼雑記

    WebKit のコードについて。 Google 社内のコードを見慣れてると、 WebKit のコードはまず、オープンソース的な感じというか、ありていに言うとコメントが圧倒的に少ないように感じます。特に内部についてわかってない人もわかるようなコメントを書く気は基的に無いらしく、冗長気味なコメントを書くとむしろ削ってちょとレビューされたりします。偉い人死んだらどうするのかなー的な。 あとは関数名とかもイマイチなのが多いように思います。個人的な体験で一番印象的だったのは HTML parser 内にあった parseSpecial という関数でした。この special ってのは textarea, script, style, iframe なんかの中にあるタグが無視されるような種類のものを指していたのですが、 special って命名はアレだなぁ…と。そう思いつつ WebKit の人はみん

    WebKit について (コード) - 2010-01-02 - 兼雑記
  • Technical Note TN2185:Mac OS XのためのC++のヒントとこつ

    はじめにこのドキュメントの目的は、最新の複雑なC++ Mach-OアプリケーションをMac OS Xに導入する作業を容易にすることです。よく生じるいくつかの問題に対して、役に立ついくつかのヒントを示します。網羅的なリファレンスといえるものではありませんが、悩めるC++デベロッパを正しい方向に導き、必要に応じてさらに詳細な情報を入手する手だてを提供します。先頭に戻る 可視性オプションの選択GCCでは、可視性とは、ほかのツールでいうダイナミックライブラリのインポート/エクスポートのことです。ただし、GCCのシンボルは可視か隠蔽されているかのどちらかしかありません。可視シンボルは、共有ライブラリのエントリポイントとなります。詳細については、「Controlling Symbol Visibility」を参照してください。ここでは、概要を述べるに留めます。Cでは、どのシンボルを可視にし、どれを隠蔽

    craf
    craf 2010/01/11
    gccの-fvisibilityオプションの日本語解説がある。Mac以外でgcc使う場合も必見。
  • Visibility - GCC Wiki

    Note: the text on this page was almost entirely written by Niall Douglas, the original author of the patch, and placed on nedprod.com. This copy in the GCC wiki has some corrections that may not be present on Niall's site. Why is the new C++ visibility support so useful? Put simply, it hides most of the ELF symbols which would have previously (and unnecessarily) been public. This means: It very su

    craf
    craf 2010/01/11
    -fvisibilityオプションの解説。大きな共有ファイルでは必須。
  • EmacsにおけるC++ source codeの細かいindent設定方法 (1) - I.S.の日記

    Source codeにおけるindentの流儀についての議論は果てがないように見受けられます。I.S.にとってもindentについては拘りがあり、defaultの設定では満足できないことが多いです。 Emacsではfileの編集中に自動的にindentを行ってくれますが、そのindent方法が自分の好みでなければ、その便利な機能も一転迷惑極まりない機能に成り果てます。 Emacsでは、設定file*1において、以下のようにstyleを選択することができますが、その用意されているstyleの全てが自分の好みでなければ、自分でindent設定を細かく記述するか、手動でひたすらindentしつづけるか、自動indentの苦痛に黙って耐えつづけるしかありません。 (add-hook 'c++-mode-hook '(lambda () (c-set-style "gnu") ; k&r、bsd、

    EmacsにおけるC++ source codeの細かいindent設定方法 (1) - I.S.の日記
  • JNIより簡単にJavaとC/C++をつなぐ「JNA」とは(1/4)-@IT

    インターネットの普及に加えて、リッチクライアント/RIAの発展とともに、アプリケーションの形態は、C/S(クライアント/サーバ)システムから、Webアプリケーションシステムにシフトしています。一般の情報発信システムだけではなく、企業の基幹情報システムまで、盛んにWebアプリケーションで構築するようになりました。 この変化の主役であるといわれる、Java技術は、Webアプリケーションシステムの発展とともに、ネットワークの親和性や、プラットフォーム適用の多様性で、広く受け入れられて、Webアプリケーションシステム開発の基盤技術になっています。 これまでのC/Sシステムでは、サーバロジックはC/C++で実装されるケースが一般的でした。C/SシステムからWebアプリケーションシステムにシフトする際に、Java技術を導入することを決めた場合、Java技術で、すべて新規開発するのは1つの選択肢ですが、

    craf
    craf 2009/12/16
  • 差分指し手生成とメモリコピーの高速化の基礎 - Bonanzaソース完全解析ブログ

    ■ 差分指し手生成とメモリコピーの高速化の基礎 差分指し手生成などをしようと思うと、それぞれの駒についての指し手をシリアル化(ここでは一次元の配列にまとめるの意味)する必要があります。 このとき、細切れになっているメモリを一箇所に集める必要があり、この部分をいかに高速化できるかが差分指し手生成が成功するかどうかの鍵になります。 ■ 高速なメモリコピーとは? どのへんの読者を対象にしていいのかわからないので、今回は基礎ということでメモリコピーの基事項だけ解説します。 差分gencap(駒を捕獲する手)の指し手生成では、駒を捕獲することのできることがわかっている駒を対象に処理します。よって、メモリをコピーするマクロを用意することを考えます。またコピーされるサイズは(指し手が存在することがわかっているところを対象とするので)4バイト以上であり、コピーサイズ0ということはありません。 // メモ

    差分指し手生成とメモリコピーの高速化の基礎 - Bonanzaソース完全解析ブログ
    craf
    craf 2009/12/02
  • セキュアプログラミング for Linux and Unix HOWTO

    この文書は、Linux および Unix システム上で安全なプログラムを書く際に必要と なる設計や実装について、そのガイドラインを提供します。 遠隔のデータを見るためのビューアーや Web アプリケーション(CGI スクリプト を含む)、ネットワーク・サーバ、setuid や setgid してあるプログラムが対象です。 C や C++JavaPerlPHPPython、TCL、Ada95 個別のガイドラインも掲載します。 Table of Contents1. はじめに2. 背景2.1. Unix や Linux、オープンソースもしくは フリーソフトウェアについて2.2. セキュリティの原則2.3. なぜプログラマは危ないコードを書いてしまうのか2.4. オープンソースはセキュリティに効果があるのか2.5. 安全なプログラムの種類2.6. 疑い深く、こだわりが強いことに価値がある

  • 2次キャッシュを意識してコーディングしてる?

    先日、北陸twitterオフで、2次元配列をx,yの順でアクセスするのと、y,xの順でアクセスするのでは、実行速度が違うんだよ、という話をしていたのだが、正直このネタは4、5年前にMIPSを使っていたときの事なので、今でも有効なのか?と思いベンチマークプログラムを作成して検証してみた。 内容 Integer型二次元配列の内容を処理する時に、アドレス順に行う(キャッシュにヒットしやすい)場合と、そうでない(キャッシュにヒットしにくい)場合を比較してみた。 環境 MacBookPro (Core2Duo 2.4G / Memory 4GB) MacOS X 10.5.6 gcc 4.0.1(-O2で最適化) 結果 X Y キャッシュヒット キャッシュミス diff 1024 1024 0.002351 sec 0.062166 sec x 26.44 1024 2048 0.004840 se

  • 浪漫の求道者:GoogleTestがかなりいけてる その2

    GoogleTest Assertions まとめ】 ↓のWikiから、Assertionを和約(適当)してまとめてみる。 http://code.google.com/p/googletest/wiki/GoogleTestPrimer http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide 注)勢いで書いたので、自分に都合の良い所だけ抽出、意訳しています。 あと、実はバージョン1.2.0の時に訳したもののコピペです。 基 Fatal assertionNonfatal assertionVerifiesASSERT_TRUE(condition);EXPECT_TRUE(condition);condition is trueASSERT_FALSE(condition);EXPECT_FALSE(condi

  • 絵で見てわかるC言語入門 - 第1章 - J

    そういえば勉強会の時に、「関数ポインタを返す関数はどうやって書くか?」みたいになったが、僕はそういう時は$ man signal して調べる派である。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html さて、C言語を使い慣れた人には常識ですが、C言語初心者にとって少し難しいのが、変数の宣言です。 例えば、初心者にとって、関数ポインタの配列へのポインタを返す関数の宣言を書くのはあまり簡単ではありません。 C言語の初心者には、以下のようなコードを書くのは少し難しく、また、C言語にあまり慣れていない人は、typedefなどを使ってしまいがちです。 typedef int (*func_t)(int); typedef func_t func_arr_t[10]; extern func_arr_t *x[40]; in

    絵で見てわかるC言語入門 - 第1章 - J
    craf
    craf 2009/10/19
    初心者脱出は大変だなぁ
  • きまぐれ日記: 動的配列への追加コストはなぜ O(1)?

    動的配列への追加コストは O(1) ってのは覚えていればそれだけの話ですが,どうしてかと言われると意外と難しいものです. というのも, このO(1)ってのは動的配列の実装方法に強く依存しているからです.実装を知っていないと答えられません. 一般論として,1つ要素を追加するとき,配列に空きがなかったら新しく配列を作り直して全要素をコピーする必要があります.コピーのコストは O(n) だから,追加コストも O(n) になるという議論が混乱の元になっています. こういうときは,要素追加を n 回繰り返したときの計算量を n で割った平均をとるという解析方法が使われるそうです.一般に, ある operation C の計算量を C を n 回行ったときの計算量 O(n) を n で割った値 O(n)/n で評価する手法をならし解析 (amortized analysis)と言うそうです. さて,s

    craf
    craf 2009/09/07
    わかりやすい解説
  • gccにおけるatomic操作命令の個別関数

     gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数

    craf
    craf 2009/08/06
  • SQLite3's C++ API 日本語

    C/C++ Interface For SQLite Version 3 [日語超訳版] 最終改訂: 2006年02月16日 10時59分54秒 原文: http://www.sqlite.org/capi3.html -- last modified on 2005/03/11 04:39:58 Back to index 1.0 Overview SQLiteバージョン3.0は、SQLiteの新バージョンであり、派生元のSQLite 2.8.13コード・ベースとは、非互換性のファイル・フォーマットおよびAPIを備えています。SQLiteバージョン3.0は次の機能要求に答えるために作成されました: UTF-16の対応 照合順序をユーザ定義可能なテキスト インデックス付カラムにBLOBを格納する能力 これらの機能を実装するためには、データベース・ファイル・フォーマットに非互換な変更が必要

    craf
    craf 2009/08/05
  • Makefile でのヘッダファイルの依存関係を自動的に解決する - ritcheyの日記

    Makefile でヘッダファイルの依存関係を書くのは結構面倒である。以前は X に付属の makedepend コマンドを使って行うのが普通だったが、便利な方法がないか調べてみた。 GNU make のマニュアルに、まさに依存関係を自動生成する方法そのものがかかれていた。 4.14 Generating Prerequisites Automatically に詳しい説明がある。make の info の日語訳が GNU make 日語訳(Coop編) - ルールの記述 があるが、ここにかかれている Makefile のルールそのままでは動作しなかった。英語の原文の方のルールにしないと動作しない。単に引用符の対応関係がとれていないだけ。 以下のようにすればよい。Makefile 全体を乗せておく。 生成された *.d を include する。ただし、一番最初は *.d は存在しない

    Makefile でのヘッダファイルの依存関係を自動的に解決する - ritcheyの日記
    craf
    craf 2009/07/30
  • 浪漫の求道者:GoogleTestがかなりいけてる その1

    [GoogleTest1.3.0を使ってみた] Google C++ Testing Framework http://code.google.com/p/googletest/ Googleのテストフレームワーク「GoogleTest」に去年の年末くらいから興味を持ち始めて使ってみた。 かなりいけてるのに日語解説が少ないので、やった事をいろいろと書き出す。 なにができるのか・マルチプラットフォーム対応 Windows(VC)、Cygwin(gcc)、LinuxMacOSWindowsCE、Symbian・・・ ・テストコードの自動発見   RUN_ALL_TESTS() で勝手にTEST(Hoge, hoge)と書いたコードを探索して実行してくれる (もちろん任意のテストだけ実行する、しないのオプションもあり) ・豊富なAssertion 失敗(ASSERT)と警告(EXPECT)

  • chaos2cosmos.net » Makefileの(おそらく正しい)書き方講座

    LinuxMacを使っていて,C++Texのコンパイルをするときにいちいち直接g++やplatexコマンドでコンパイルするのは効率が良いとはいえない.C++はリンクするライブラリを長ったらしく記述しなくてはいけないし,Texは2回コンパイルしなくては図表番号の索引が出来ないなどの煩わしい作業が伴うからだ. そこで,コンパイルの手順を記したMakefileを書こうという話になる.しかし,Makefileの記述方法は一歩間違うと,あまり作業が楽にはならない.ファイル間の依存関係をいちいち直接記述しなくてはいけないからだ.私の研究室の友達,後輩もこのMakefileの記述方法に四苦八苦している. この問題を解決する私なりのMakefileの一例を以下に示そう. C++ TARGET = name CXXFLAGS = -O2 -g -Wall LIBS = -lboost_thread -

    craf
    craf 2009/06/15
  • Technical Note TN2124: Mac OS X Debugging Magic

    このテクニカルノートでは、Mac OS X のさまざまな「隠れた」デバッグ機能、つまり環境変数、環境設定、GDB から呼び出し可能なルーチン、特別なファイルなどについて説明します。 Mac OS X 向けの開発をしている場合は、開発作業を楽にしてくれるものを見逃していないか確認するために、このリストに目を通してください。 はじめにMac OS X には、個々のサブシステムの開発とデバッグを支援するために、エンジニアリングチームが追加したデバッグ機能がいくつか含まれています。 これら機能の多くは、リリース後のシステムにも残っており、コードのデバッグに利用できます。 このテクニカルノートでは、広く役立つデバッグ機能をいくつか説明します。別の場所で文書化されているデバッグ機能については、機能の簡単な概要と既存ドキュメントへのリンクを記載しています。このテクニカルノートでは、デバッグ機能を網羅的に

  • GCC 4.xのSSP (Stack Smashing Protector)をH8で使ってみる

    2007/01/27 はじめに GCC 4.1以降、SSP (Stack Smashing Protector)が入っています。 (それより前は、パッチだった。) 組込みもセキュリティが重要とのことで、H8でSSPを試してみます。 ただし、攻撃の検知ではなく、"off-by-one"のようなバグを検知する例を示します。 (バグ退治にも有効そう。) 環境 ハードとしては、 AKI-H8/3069FフラッシュマイコンLANボード を使います。 ROMモニタとして、 MONIX を使っていますが、他のものでも良いです。 Windows XPにcygwin、および、 KPIT の GCC4.1以降に相当するバージョンの h8300-elf-gcc がインストールしてあることを想定しています。 具体的に、動作確認したバージョンは以下の通りです。 $ h8300-elf-gcc -v Using bu

    craf
    craf 2009/06/13
  • togeの日記 - mudflapを訳してみる

    まずい。 連休中、あまりに健全な生活を行っていたために、平日帰宅すると寝てしまいます。 ちっとも勉強が進みません。 まあ、健全な生活が送れてますけどね。 ぱぱっと実装完了。 DOMを使ったことがあるなら、簡単に利用出来ます。 いやぁこれは便利だわ。 敢えて文句を言えばC++のソースなのに#incldue とかしているのとか、ヘッダで無駄なファイルをインクルードしているのが気にいらんが。 せっかくの機能なのになかなか使われないみたいですね。便利なのに。 googleで"mudflap gcc"と指定してもあんまり情報がないのが残念です。 少しでも普及するように、以下のmudflap記事を適当に訳してみました。 http://gcc.gnu.org/wiki/Mudflap%20Pointer%20Debugging 続きを読む id:m107さんとかid:halo_w2さんが文字描画やってい

    togeの日記 - mudflapを訳してみる
  • Google が公開しているソフトウェアの解説(その4)- Performance tools -

    GoogleGoogle Code でオープンソースとして公開しているソフトウェアの解説シリーズ(前回のエントリ)の第 4 回です。今回は Performance tools について紹介します。この Performance tools は、実際に Google 社内で広く使われており、特に、C++ でテンプレートを使用するマルチスレッドアプリケーションを開発する際に役立ちます。Linux 環境を主に対象としています。 Performance tools とは? C や C++ でプログラムの書いたことのある多くの人は、「プログラムを高速化したいけれど、どこが一番のボトルネックか分からない」とか、「メモリリークがあるようだけれど、どこで発生しているか分からない」といった問題で苦しめられた経験が一度くらいはあると思います。もちろん、こうした問題の解決策として、アドホックにプログラムをチ

    Google が公開しているソフトウェアの解説(その4)- Performance tools -