torutkのブログ

ソフトウェア・エンジニアのブログ

C++

C++クラスにstd::string型静的メンバー文字列定数を定義する

C++

C++のstd::string型クラス静的メンバー変数に文字列定数を定義するいくつかの方法 はじめに 10年とちょっと前、C++(C++98/03規格)でプログラミングする際に文字列定数をどうやって表現しようかと考え、クラスの静的メンバ変数にconst修飾子を付けました。 …

VC++ 64bit版の関数呼び出し時はレジスタが多用されている

はじめに Windows OS上で、とあるアプリケーションソフトウェアがしばしばクラッシュ(異常終了)します。利用者の立場なので、デバッガーで…という環境はありません。開発元で対処されるのを待つのみなのですが、運用環境でしか再現しないときなどは対処が…

書籍「Effective Modern C++」の訳本が出てました

C++

Effective Modern C++ ―C++11/14プログラムを進化させる42項目作者: Scott Meyers,千住治郎出版社/メーカー: オライリージャパン発売日: 2015/09/18メディア: 大型本この商品を含むブログ (7件) を見るあの「Effective C++」の著者スコット・メイヤーズ氏に…

Windows Sensor and Location APIでGPSデバイスから座標を取得

Windows 7から、Sensor and Location APIが導入され、これに対応したGPSデバイスを使うと標準APIを使って位置などを取得することが可能になります。MSDNの以下記事(日本語訳)参照。 Introduction to the Sensor and Location Platform in Windows | Micros…

Windows上のNetBeans 8.0 RC1でC++開発を整える

Linuxであれば簡単なのですが、Windows上でNetBeansのC++開発環境を構築するのは少々複雑でした。NetBeansはGNUコンパイラ系を使用するので、Windows上ではまずGNUコンパイラを整えるところから始まります。GNUコンパイラはUNIX系のツールなので、Windowsへ…

処理時間の算出にSTLのadjacent_difference

C++

何事にも七面倒くさいC++ですが、STLライブラリにadjacent_differenceというアルゴリズムが用意されています。これは、例えば繰り返しタイムスタンプを取得し、そのタイムスタンプの間隔を出したいときにぴったり適合します。id:torutk:20121019で、Windows…

高精度タイマーQueryPerformanceCounterの分解能

JavaのSystem.nanoTime()メソッドは、高分解能のタイマーからその現在値をナノ秒単位の時間で取得するネイティブメソッドです。高分解能タイマーにはいくつか種類がありますが(後述)、その仕組みは、ハードウェア的にはある周波数で動作するクロックの回数…

Visual Studio 2010でC++/ネイティブな開発

数年間C++から離れていたので、その間にWindows/C++に起きた技術の変化を追いかけて整理をしています。とりあえず大枠として考えていることは次です。 文字コードの扱い C++ 11規格の扱い 64bitコードの扱い 並列処理の扱い Boostライブラリの使用範囲 ロギ…

Visual Studio 2010の性能問題メモ

Windows上でOSの性能を評価するためのプログラムを作成するため、開発環境としてVisual Studio 2010(VC++)を使うことになり、調査/整理をしています。Visual Studio 2010は、それより前のバージョンから作りが大きく変わり、.NETフレームワーク上で動くGU…

BoostとVisual C++

C++

Visual C++ 10(Visual Studio 2010)に、Boost 1.51を使ってプログラムを作ろうとして躓きました。Boostは、次のサイトからビルド済みバイナリをインストールします。 http://www.boostpro.com/download/ で、program_optionsライブラリを使用したプログラ…

C++のロギングライブラリ選択

C++

オープンソースのC++ロギングライブラリを調べてみると、少なからず候補があります。しばらく前に、次のWebページに候補をまとめています。 ロギングライブラリの選択 候補の一つPantheiosのサイトにある記事に、ロギング性能について比較したものがあり、Pa…

x86系プロセッサのInvariant TSC

x86系CPUがクロック毎に積算するTSC(Time Stamp Counter)をRDTSC命令で取得して高分解能な時間計測を行う際に、デュアルコアで挙動不審な状況がありました。 x86系CPUのRDTSC命令で高分解能時間計測 - torutkの日記 また、SpeedStepやTurboBoostなど実行中…

C++用地図ライブラリMapnik

C++で地図データの操作と地図描画を扱えるライブラリを探していたら見つけました。http://mapnik.orgC++で、クロスプラットフォーム(Linux、MacOS X、Windows、他)に対応する地図描画ライブラリです。最新のLinuxディストリビューションには標準で含まれて…

Visual C++ 2010 Expressで64bitコンパイル

Visual C++ 2010 Expressは32bitコンパイルのみ提供されていますが、別途Windows SDKを追加することで、64bitコンパイルができるようになります。 Windows 7 Professional 64bitにVisual C++ 2010 Expressをインストールした状態 この時点で、新規プロジェク…

ACE+TAO 5.8.2をSolaris 10/Sun C++ 5.11 64bitでビルド

Solaris調査の継続で、ACE+TAOの最新版である5.8.2をSolaris 10 9/10 x86上でビルドしてみました。コンパイラに、これまた最新のSolaris Studio 12.2(Sun C++ 5.11)を使って、しかも、64bit版でビルドをしてみました。 手順は以前のバージョンでビルドした…

ccacheでビルド時間短縮

CentOS5.3にccacheを入れてみました。EPELサイトにバイナリパッケージがあるので、/etc/yum.repos.d/にepelのrepo設定ファイルを置いていれば、yum install ccacheでOKです。実際、どの程度早くなるのかを試すべく、log4cpp-1.0をビルドして測ってみました。…

distccによる分散コンパイルでビルド時間を短縮

C++

背景 C++は、コード規模の増分に対して指数的にコンパイル・リンク時間が増大します。 以前、C++とJavaのビルド時間比較で調査したデータid:torutk:20071104と、id:torutk:20071107から、C++のコード規模によるビルド時間の違いをまとめ直したのが以下の表で…

IDL/C++マッピングにおけるvaluetypeの_copy_valueメンバについて

CORBAを使ったプログラミングで、valuetypeのインスタンスをコピーしたい局面があったのですが、単に実体の=ではエラー(operator=がprivateで隠される)となってしまうので、その方法を調べてみました。どうやら、valuetypeの基底クラスであるValueBaseで純…

CentOS 5用のC++ライブラリ(Qt/ACE+TAO/Boost)RPMパッケージ作成

以下のC++開発用ライブラリがバージョンアップしているので、CentOS 5用にRPMパッケージを更新してみました。RPMパッケージはファイルサイズが大きいので、個人ページでは容量制限をオーバーしてしまい、手順のみCentOS 5用バイナリパッケージのWebページで…

コンパイラ依存のコーディングを囲む#ifdefシンボル

C++

Windows上でのVC++とLinux上でのGCCとに対応するコードを書く際に、コンパイラ依存部分を#ifdefで切り替える場合のマクロ指定を調べました。 コンパイラがデフォルトで定義するマクロで使えそうなものは、 Linux/GCC __linux__, __GNUC__ Windows/VC++ _WIN3…

Visual C++長年の課題が

あまりWindowsプログラミングはしないので(Javaは使うがWindows固有なことはしない)、たまにVisual C++でプログラムを作成するときの課題で長年残っていたもののうち以下2つが今日解決しました。 Windows上でインストーラでインストールできるようにする …

洋書「Programming Principles and Practice Using C++」が来た

C++

Programming: Principles and Practice Using C++ (Developer's Library)作者: Bjarne Stroustrup出版社/メーカー: Addison-Wesley Professional発売日: 2008/12/15メディア: ペーパーバック クリック: 67回この商品を含むブログ (11件) を見るAmazonに1月下…

flymakeの設定改善

CentOS 5のEmacsは21で、flymakeがうまく動かなかったので、flymakeを標準搭載しているEmacs 22をビルドして使用しています。 ここで、Emacsの設定が暗い背景に明るい文字であると、エラー行の色が明るいピンクと文字が見えなくなってしまい、いまいちです。…

動的共有ライブラリのバージョン管理

d:id:torutk:20081103でBoostライブラリのSONAMEについて調べていました。今回は、自分で作成するプログラムにおいて、動的共有ライブラリファイルのSONAMEの仕組みを使ってバージョン管理をする方法を模索しました。 やりたいこと C++のプログラムを動的共…

GCCのコンパイルオプションで関数トレーサ

この本の「#77 関数へのenter/exitをフックする」で、GCCのコンパイルオプション-finstrument-functionsを使い、関数が呼び出された時、関数から復帰するときにフックを入れる方法が紹介されています。フック関数のシグニチャは以下です。 void __cyg_profil…

Linux glibcで、LD_AUDIT機能による関数トレース

この本の「#77 関数へのenter/exitをフックする」で、GCCのコンパイルオプション-finstrument-functionsを使い、関数が呼び出された時、関数から復帰するときにフックを入れる方法が紹介されています。これはコンパイルオプションで埋め込むものですが、同書…

std::stringをSTLアルゴリズムで使う

C++

C++である文字列からその一部分を抜き出したいとき、std::stringのメンバ関数を見ると、何文字目、何文字分といった数値指定をするAPIが多く、C言語的です。(例:findは見つかった文字が何バイト目にあるかを数値で返却)そこで、STLアルゴリズムが使えると…

書籍購入

C++

C/C++セキュアプログラミングクックブック VOLUME 3 ―公開鍵暗号の実装とネットワークセキュリティ作者: John Viega,Matt Messier,岩田哲(監訳),光田秀出版社/メーカー: オライリージャパン発売日: 2005/05/24メディア: 大型本 クリック: 29回この商品を含む…

log4cppの設定ファイル

C++

以前Webページに、SimpleConfiguratorによるログ設定ファイルの記述方法を記載しています。log4cppには、このSimpleConfiguratorの他に、もう一つPropertyConfiguratorによるログ設定ファイルの記述が可能です。SimpleConfiguratorでは、カテゴリの階層化が…

GCCで、__attribute__ にconstructor指定した関数内から他のライブラリを呼び出すとき

C++

Binary Hack本で記載されていたGCCの__attribute__を使ってconstructor指定した関数は、その実体を持つ動的リンクライブラリファイルをロードしたときに実行されます(main関数が呼ばれる前)。 namespace charlie { void init() __attribute__((constructor…