タグ

c++とC++に関するhibomaのブックマーク (15)

  • (翻訳)C/C++のStrict Aliasingを理解する または - どうして#$@##@^%コンパイラは僕がしたい事をさせてくれないの! - yohhoyの日記

    元記事:Understanding C/C++ Strict Aliasing, or - Why won't the #$@##@^% compiler let me do what I need to do!, Patrick Horgan氏 訳出メモ: 自分自身の理解のために日語訳を行ったStrict Aliasing Rules解説記事。 訳文中では "aliasing/alias", "strict aliasing rules", "type punning" をそのまま表記する。直訳すれば "別名(エイリアシング)", "厳密な別名規則", "型もじり(言い換え)" となる。 ところで、何が問題なの? strict aliasing rulesに関しては多くの混乱が見られます。人々を混乱させる主要因となっているのは、aliasingに言及する2種類の異なるグループ; コンパ

    (翻訳)C/C++のStrict Aliasingを理解する または - どうして#$@##@^%コンパイラは僕がしたい事をさせてくれないの! - yohhoyの日記
    hiboma
    hiboma 2014/06/30
  • GCC 4.8のビルドはデフォルトでC++になるかも

    Diego Novillo - Switching to C++ by default in 4.8 GCC開発者の一人でGooglerのDiego Novilloは、今月の3日にMLで、GCC 4.8のビルドをデフォルトでC++にしようと提案している。これは、GCC自体をビルドする際のデフォルトの言語をC++にするという意味である。GCCがコードをデフォルトでC++としてコンパイルするのではない。現在のGCCビルドシステムの言語モードをC++に切り替えるのは非常に簡単で、必要なのはテストだけだという。 2011年、GCCの実装で、C++を使用可能にする採択が受け入られている。GCC自体のコンパイルをデフォルトでC++にすることは、GCC実装におけるC++の利用を更に加速するだろう。 GCCにおけるC++利用のコーディング規約は、目下作成中である。コーディング規約が完成する前に、GCCのビ

    hiboma
    hiboma 2012/04/06
    セルフホスト、ブートストラップ
  • hiphop php でPHPからジェネレートされたC++コードを読んでみよう。 - お前の血は何色だ!! 4

    PHP advent calendar です。 クリスマス過ぎましたけど 12/26日をお送りします。(google docsに名前書き忘れていたんだよ) 前回 12/25日は、@yoya さんの「WindowsPHPbuild する」でした。 今回は、facebookの人が作った PHPC++ に変換して高速動作させるという hiphop php がジェネレートする C++ のコードを読んでみたいと思います。 C++は厳格な静的型づけの言語ですが、PHPは動的型づけの言語です。 これをどうやって、変換しているのか?という話です。 非常に長く、眠い話になりますが、寝ないで読んでいただけたら嬉しいです。 間違いなどありました、ぜひ教えてください。 hiphop php を入れよう。 そもそもhiphop php を入れるのはすごく大変です。 Scientific Linux

    hiphop php でPHPからジェネレートされたC++コードを読んでみよう。 - お前の血は何色だ!! 4
  • コンパイル時のワーニング(-Wallと-Werror)(2) : 柴田 芳樹 (Yoshiki Shibata)

    プログラミングの伝承としてif文の中で変数をある特定の値と比較する際に、その特定の値を==の左に書いて、変数を右に書くというものがあります。たとえば、C++であれば、 if (0 == ptr) { // ... }このように書く理由として、==とタイプすべきところを間違って=と書いてもコンパイラがエラーにしてくれるからだと説明されます。しかし、上記の書き方は、プログラムを読む際には、「0はptrか」と読むことになり、意味としておかしいものとなります。来なら素直にptr == 0と書いて、「ptrは0か」と読み手に読ませるべきです。※1 gcc/g++では、-Wallをコンパイルオプションで指定すれば、ptr = 0と間違って書いたとしても、次のように警告します。 warning: suggest parentheses around assignment used as truth v

    コンパイル時のワーニング(-Wallと-Werror)(2) : 柴田 芳樹 (Yoshiki Shibata)
    hiboma
    hiboma 2011/06/13
    コンパイラの賢さに任せる
  • 使いもしないのにC++のtemplateを毛嫌いする全ての人に - 神様なんて信じない僕らのために

    C++AdventCalendarの記事です。 さて、 生配列使ってますか? tr1::array(boost::array) 使ってますか? 生配列使っていると答えた貴方、 →まず死ね。 はい、arrayが常識ですよね。 さて、とはいえ、 「テンプレートを使うと遅いしコードがでかいし」 「生配列が一番速いしコードが小さいし」 「なのでテンプレート禁止」 なんて話を聞くこともあるかと思いますが、 こういう事をいう人は大抵「テンプレートを書いたことがない」のに言ってます。 なぜか? こういう人が当に心配しているのは「テンプレートが肥大化すること」じゃないのです。 「テンプレートが書けないし読めないのを認めたくないからです」 多くはCの老害だからですが、そういう人は放っておいてC++な人はきちんとテンプレートを使いましょう。 だって多くのテンプレートのコードは大きくもなければ非効率でもないか

    使いもしないのにC++のtemplateを毛嫌いする全ての人に - 神様なんて信じない僕らのために
    hiboma
    hiboma 2010/12/20
  • Mac OS X Leopard で Boost.Filesystem を使う - 津駄の日々

    Boost.Filesystemライブラリを使ったプログラムをMacでコンパイルしようとしてもそのままではエラーが出てコンパイルできない。コンパイルするためには-lオプションを用いて、「libboost_system-mt」と「libboost_filesystem-mt」を明示的にリンクする必要がある。 ちなみにBoostのバーションは1.37.0、MacPortsでインストールしたものです。 "test.cpp" #include <boost/filesystem.hpp> using namespace boost::filesystem; int main() { path test("test"); if(!exists(test)){ create_directory(test); } return 0; } コンパイル g++ -lboost_system-mt -lboo

    Mac OS X Leopard で Boost.Filesystem を使う - 津駄の日々
  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
    hiboma
    hiboma 2010/01/04
    volatile , sig_atomic_t,
  • 常駐型サーバープログラムのデバッグ手法

    BOOK: WEB+DB Press TITLE: 常駐型サーバーのデバッグ手法(ドラフト版) AUTHOR: (株)プリファードインフラストラクチャー 太田一樹 *注: この文章はWEB+DB PRESS Vol.48に掲載された記事のドラフト版です はじめに 今回はデバッグ関連特集ということで、常駐型サーバープログラムを作成する際のハマりどころやそれに対する解析方法・解析ツール・対策を、実際の経験を交えながら紹介したいと思います。 筆者は(株)プリファードインフラストラクチャーでインメモリ分散検索エンジン「Sedue (セデュー)」を開発しています。モバイル向け検索エンジン「エフルート」や、2008/11/6にリニューアルされました「はてなブックマーク2」などの検索バックエンドとして使われております。 この検索エンジンはいくつかの常駐型サーバープログラムから構成されており

  • STL - Standard Template Library

    コンテナ選択のポイント : パフォーマンス 低速 ← 対数 線形 償却 定数 → 高速 (注) 償却 : 償却定数時間。 たまに長い時間を要することがあるが、多くの場合は定数時間で処理が終わるため、 平均してみると処理にかかる時間を定数だとみなせるもの。 ex. vector の 末尾への追加。 キャパシティを超える場合のみ線形時間かかるが、通常は定数時間で処理が終わる。 コンテナ ヘッダ カテゴリ 先頭 末尾 中間 参照 挿入 削除 備考

    hiboma
    hiboma 2008/09/07
    '償却定数時間'
  • http://docs.sun.com/source/806-4840/LibrefTOC.html

    hiboma
    hiboma 2007/12/06
  • stringstreamのクリアの仕方 - りんでん記

    メモ。はてブでもよかったんだけど。 ググってみたらこんな記事をみつけた。 > # ちなみに、stringstream の文字列のクリアは > # stringstremam::str("") で、一度はまりました(^^; (中略) stringstream::str("")は文字列ストリームのバッファを クリアする方法ですが、意外と知らない人が多いようです。 うわぁ、はまったー 知りませんでしたw (以下、6/27 追記) ちなみに、stringstream::clear()はストリームの状態フラグをクリアするのに使うみたい。 こんな感じ↓ #include <iostream> #include <sstream> using namespace std; int main(void) { string str; stringstream ss; ss << "abc"; ss >> s

    stringstreamのクリアの仕方 - りんでん記
  • The Articles - Elegant C++ ハッシュコンテナ

    Problem std::mapより高速なコンテナはありませんか? Solution std::mapは十分速いコンテナですが、より速いハッシュコンテナが存在します。 代表的なハッシュコンテナ(の実装)としては次のようなものがあります。 ・次期C++標準unordered_map ・SGI系hash_mapGoogleCode sparse_hash_mapGoogleCode dense_hash_map これらのハッシュコンテナについて、std::mapと処理速度の比較を行ってみました。 評価には次のコードを使用しました。 今回は、std::stringをキーとして100万個の要素を追加し、200万個の検索を行いますので、検索の半分は存在しないキーでの検索になります。 コンパイラはgcc version 4.1.2で、最適化オプシ

    hiboma
    hiboma 2007/12/03
  • C++編(標準ライブラリ)●Programing Place

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    hiboma
    hiboma 2007/11/30
  • LangEdge ライブラリ: C:/Dev/lei_libs_2/langedge/pathutil.hpp

    hiboma
    hiboma 2007/09/28
  • ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - - C/C++開発者向けemacsの設定

    emacsで C/C++ でコーディングしている開発者向けの emacs の設定です. [F5]でビルド,[F4]でエラー行へジャンプといったことが出来,かなり便利です. 具体的には以下のような事が出来ます. [F7]でコンパイル(バッファを全部保存して,make all します) [F4]でコンパイルエラー行へジャンプ [F1]でカーソル下の単語について マニュアルを開く SHIFT+[F7] でリビルド(make clean all) SHIFT+[F4] で一つ前のエラー行へジャンプ 設定は .emacs に以下の内容を追記するだけです. (setq auto-mode-alist (append '(("\\.C$" . c++-mode) ("\\.cc$" . c++-mode) ("\\.cpp$". c++-mode) ("\\.hh$" . c++-mode) ("\\.

    ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - - C/C++開発者向けemacsの設定
  • 1