タグ

Programmingとc++に関するfimbulのブックマーク (19)

  • 分割コンパイルとリンケージ

    | 分割コンパイルと翻訳単位 | extern記憶クラス指定子 | リンケージ | オブジェクトモジュールとライブラリ | 演習問題 | [付録]nmコマンド | 分割コンパイルと翻訳単位 だんだん複雑なプログラムを開発するようになると ソーステキストが長くなり,一つのソースファイルで作成していると 全体を見通すのが難しくなってきます. またほんの一部だけを修正をしたときにも 全体をコンパイルし直さなければならないので, コンパイルに時間がかかるようになります. よって,プログラムをいくつかの部分に分けて 別々に開発したいという要求が自然に起こってきます. このような考えからプログラミング言語には 一つのプログラムを複数に分割できる機能が提供されることが多く, そのような各部分のことを一般にはモジュールと呼びます. C言語ではモジュールは翻訳単位と呼ばれ, おおまかには一つのソースファイル

  • カスタムメモリマネージャと高速なメモリアロケータについて

    【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!

    カスタムメモリマネージャと高速なメモリアロケータについて
  • 本の虫: 邪悪なC形式のキャストにしかできないこと

    注意:邪悪で汚らわしいC形式のキャストは、いやしくもC++プログラマたる者は、使うべからず C++では、玉虫色のC形式のキャストの機能を、三つに分割した。static_cast、reinterpret_cast、const_castである。しかし、この三種のキャストでは、C形式のキャストを完全に代替できないという声をよく聞く。曰く、「どうしても書けないキャストがある」と。 それはよく聞く話だが、では実際にどのようなキャストなのかということは、誰も審らかにしない。誰も知らないキャストであれば、特に使えなくても問題ないはずだ。ただし、「C形式のキャストならばできるキャストが、新しいキャストを組み合わせてもできない。どんなキャストかは知らないが、とにかくできないと聞いている。故に新しいキャストはクソだ」などという論調で、C++の改良されたキャストを使わぬC畑の外道がしゃしゃり出てくるのも困る。そ

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • uguu...

    o m o i k a n e s e r i k a g a l l e r y 2024-08-13 omoikane@uguu.org

  • そろそろvolatileについて一言いっておくか - yamasaのネタ帳

    先月、CBUGとわんくまの勉強会にて、アトミック変数とかメモリバリアとかvolatileとかについて話をしてきました。 ちょっと遅くなりましたが、そのときの講演資料を一つにまとめたので、ここで公開しておきます。あと、補足記事も追加していってます。 volatileの実装の詳細について C++0xのメモリバリアについて(その1) C++0xのメモリバリアについて(その2) Double-Checked Lockingについて そろそろvolatileについて一言いっておくかView more presentations or Upload your own.

    そろそろvolatileについて一言いっておくか - yamasaのネタ帳
  • テンプレートあれこれ (4) -- typename の役割 - C++ Labyrinth

    テンプレートあれこれ (4) -- typename の役割 typename というキーワードには、2通りの用法がある。 "static" もそうだが、同一のキーワードに複数の意味を持たせるのは、 C++ の悪い癖だな。なんとかしてほしいところ。 で、typename の一つの意味は、テンプレート引数として 「型」を取ることを宣言する場合。 これは、"class" キーワードで置換できる。 たとえば、次の (A) と (B) は同値である。 template<typename T> class Foo; // (A) template<class T> class Foo; // (B) まあ、これは誰でも知っていると思う。 typename には、もう一つ、後続する識別子が 「型名」であることを明示するという重要な働きがある。たとえば、 template<class T> class

  • 本の虫: Boostのenable_ifについて

    Boostには、enable_ifというメタ関数がある。このメタ関数の実装は、実はとても短い。とても短いので、分かりやすい。 template < bool B, class T = void > struct enable_if_c { typedef T type; } ; tempate < class T > struct enable_if_c< false, T > {} ; template < class Cond, class T = void > struct enable_if : public enable_if_c< Cond::value, T > {} ; きわめてシンプルだ。なお、これの逆をする、disable_ifなるメタ関数もある。まず、語るよりも、例を示そうと思う。そのほうが分かりやすいだろう。 例えば、ある関数の呼び出しを、組み込みの整数型に限りたい

  • Episode.1 #defineを「使うな」と「使え」 - キチガイ瀬奈科さん一家の解放治療場

    読んで無い人は先にこちらをどうぞ -> Episode.0 なぜか、#defineは「使うな」と言われたり、「使え」と言われたり、扱いに困ってしまいます。でもうまく使えば見やすく、簡潔なプログラムが書けるようになります。私の認識の経緯を絡めながら#defineを理解していこうと思います。 初めての「使え」 C言語を習うと、必ずマジックナンバーということを聞くと思います。 1 int array[50]={}; 2 int i; 3 for ( i=0; i<50; i++ ) { 4 array[i] = 100; 5 }たとえば上記のようなプログラムがあったとして赤文字の部分がマジックナンバーで、それを#defineで記述しろってことが#defineとの最初の出会いでした。これはこれで理解できます。*1 初めての「使うな」 逆に、私が始めて#defineを「使うな」ということを聞いたのは

    Episode.1 #defineを「使うな」と「使え」 - キチガイ瀬奈科さん一家の解放治療場
  • 今更ながらに Boost.SmartPointers を考える - 野良C++erの雑記帳

    Smart Pointers というか主に shared_ptr ですが(scoped_ptr のこともたまには思い出してあげてね!)。 恐らくは散々ガイシュツなネタですが、まー「検索するのが面倒だ」って人の手助けになればいいかと思います。僕も検索するの面倒ですし。 というかこの記事書いてるときもロクに検索してないです。間違いとかあったらすみません。 疑問点とか有りましたら、自分で調べるか、あるいは僕に知らせてもらえると助かります。では、始めましょう。 [最終更新] 応用例にカスタムアロケータでの参照カウント管理を追加: 09/12/16 基的な使い道 まず基的なことについては、僕が説明するより、この動画を参照した方が速いでしょう: http://www.ustream.tv/recorded/2981654 それに対するついったーでの突っ込み: http://kiwofusi.sa

    今更ながらに Boost.SmartPointers を考える - 野良C++erの雑記帳
  • C++11時代におけるクラスの書き方 - イグトランスの頭の中

    記事は、C++11 Advent Calendar 2011 : ATNDの2日目の記事です。 C++のclassは様々な使い方ができます。後発のほかの言語ではいくつもの概念に分かれているものも、C++ではすべてclassということもあります。 そこで、C++でclassを定義する際も、classと一括りにせず、自分がいったいどんなclassを書こうとしているのか明確に意識するとよいのではないだろうかと考えました。そのために、私なりのclassの分類をまとめ、この記事を書くことにしました。 これは、各々のプログラミング言語の経験により違いが出ることと思います。異論もあると思いますので、ご自身でも考えてみるとよいと思います。 以下、この記事では4種類に分類しています。 1つ目は「オブジェクト指向プログラミング (OOP) を実現するクラス」です(長いので以下OOPクラスと略します)。 vi

    C++11時代におけるクラスの書き方 - イグトランスの頭の中
  • 高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development

    先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。 C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

    高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development
  • Pimpl イディオムのお手軽な実装 - zakio.net

    Pimpl イディオム(Handle-Body, Compilation or Compiler Firewall, Cheshire Cat とも呼ばれたりする)は実装の詳細を隠蔽したい時に用いられる手法だが、内部が委譲の嵐になったり、ポインタの扱いに注意を払う必要があったりと、気軽には使い難いパターンの一つではある。内部の委譲に関しては Pimpl の性質上仕方がないものとして諦められるが、せめてポインタ周りだけでもお手軽に扱えるようにならないだろうか、というのが今回のお題だ。 教科書に載っているような Pimpl の実装は、大抵の場合、次の例の前半部分まで。こうやって隠蔽した Impl のポインタ pImpl_ を正しく扱うためには、コンストラクタ、デストラクタ、コピーコンストラクタ、代入演算子を「正しく」実装しなければならない。 class PimplTest { public:

  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

  • name mangling と extern "C" - memologue

    さて、T君と飲んだ理由は、昼間にオシゴトの技術的な相談に乗ってあげたからなのだが…。平日昼に急に携帯に電話がかかってきてビックリした。曰く、 ずっとJ2EEなコードを書いて暮らしていたのだが、わけあって急にVxWorksとC++で組み込み機器向けのコードを書くことになった。が、組み込みやC++に詳しい人間が全く居なくて難航している。 現状誤動作しており、とりあえず早急に修正しなければならないコードがあるのだが、誤動作の原因がさっぱりわからない。相談に乗ってもらえないか。ていうか助けて。コンパイラはGNUのを使っている。Cを学んだ事はある。 へいへいOKOK。 構造体Aがある。この構造体はa.hで定義されている。 構造体Aを操作する関数fooがある。fooのプロトタイプはfoo.hに書いてあり、int foo(A* a); となっている。foo.cppで関数fooが実装されている。 今問題を

    name mangling と extern "C" - memologue
  • 中3女子でもわかる constexpr

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

    中3女子でもわかる constexpr
  • 株式会社ロングゲート - 製品案内

    Information 2013/12/25 書籍『プログラミングの魔導書 Vol.3』の発売 (書籍版の予約受付は終了しました) 2013/12/03 書籍『プログラミングの魔導書 Vol.3』の予約受付開始 2011/12/01 ブログを開始 2011/11/30 著者からの指摘を受け、書籍 『プログラミングの魔導書 Vol.2』PDF版を改訂 2011/11/02 書籍 『プログラミングの魔導書 Vol.2』の壁紙公開 2011/10/05 書籍 『プログラミングの魔導書 Vol.2』を発売 (書籍版の予約受付は終了しました) 2011/9/15 書籍 『プログラミングの魔導書 Vol.2』の予約受付開始 技術トレーニングサービスを開始 2010/8/07 書籍 『プログラミングの魔導書 Vol.1』を販売開始 2010/6/01 書籍情報を公開しました 2010/2/28 今年5月

  • 株式会社ロングゲート - プログラミングの魔導書 ~Programmers’ Grimoire~ vol.1

    プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.1 “Construct the World, C++” ユーザーの力によって際限なく進化するプログラミング言語C++。2010年のいま、C++はどこにいるのか 目次(カッコ内に数字のある記事名についてはサンプルをご覧いただけます) 創刊に向けて Bjarne Stroustrupへのインタビュー (1 2) 江添 亮 boost::serializationの紹介 前編 (1 2 3 4) 近藤 貴俊 Variadic Template −お前を待っていた− Egtra Chronoライブラリで考える型システム melpon オーブンレンジクッキング (1 2) 高橋 晶 Hello,C++ World! 稲葉 一浩/k.inaba Crawling in the Stream zak メタプログラミングノキ

  • RAII - Wikipedia

    RAII(Resource Acquisition Is Initialization)は、日語では「リソース取得は初期化である」「リソースの確保は初期化時に」「リソースの取得と初期化」などの意味を持ち、資源(リソース)の確保と解放を、クラス型の変数の初期化と破棄処理に結び付けるというプログラミングのテクニックである。特にC++とD言語で一般的であり、デストラクタをサポートしないC言語などに対する優位性や利便性のうちのひとつとなっている。 RAIIでは、資源の取得をクラス型変数の構築(初期化)時に、また返却を破壊時に行う。特にプログラムの制御フローが自動変数の属するブロックを抜けるとき、その変数のデストラクタが自動的に呼ばれるため、デストラクタを適切に記述したクラス型変数の寿命が終わるとすぐに資源が返却されることが保証できるようになる。これは例外が発生したときでも同様であるため、RAII

  • 1