VC

atof の桁数限定高速版

atof をどうしても高速化したくて、桁数を限定すれば高速化できるのではないかと思い、整数部9桁、小数部9桁に限定したものを作ってみました。9桁というのは int や unsigned int で完全に表現できる最大の桁数です。なるべく整数で演算を行って速度を稼いで…

10 の整数乗

10 の整数乗を求める関数で、[-32, 31] 内の int n に対して高速なものを作りました。if ((np32 & ~63) == 0) のところですが、普通は if (0 コンパイルされるのに対し、前者は test (ビットand)と条件ジャンプの組1つで済みます。ちょっとでも速くしたかっ…

高速数字判定

isdigit が inline 展開されないので、ASCII の数字のみ判定する関数を作りました。 // <isdigit.h> #ifndef isdigit_h #define isdigit_h #include <stdint.h> //------------------------------------------------------------ // // 高速数字判定 // /// 高速数字判定のテーブ</stdint.h></isdigit.h>…

VC, CMAKE でアセンブラ リスティング ファイル出力

VC++ で書いたコードをチューニングしていて、単純なコードなのに遅いってことありますよね。 で、アセンブラ コードを見てみたくなったときに使用するのがこのコンパイル オプションです。/FA、/Fa (リスティング ファイル) | Microsoft Learnマシンコード…

struct と class はマングリングが異なるので混同してはいけない。

BCC では大丈夫だったので、不完全な struct の宣言にも class を使う習慣になってしまっていたのですが、VC ではリンク時にエラーになります。一つ目のモジュール struct Foo { }; Foo* CreateFoo() { return new Foo; } void PrintFoo(const Foo&) { } 二…

VC141+OWLNext 6.44.2 用の CMakeLists.txt

VC141+OWLNext 6.44.2 用の CMakeLists.txt の例です。pdf.cpp と pdf.rc から pdf.exe を生成する場合です。ランタイムライブラリは静的リンクです。 cmake_minimum_required(VERSION 3.11) project(pdf CXX) set(OWL "C:/lib/owl/6.44.2") ### OWLパス set…

自前のインサートイテレータ

BCC582 (C++Builder 2006) では問題なかった下記のような自前のインサートイテレータがあります。 template <class X> class MyInsertIterator { public: MyInsertIterator(X& x) : x_(&x) {}; MyInsertIterator& operator = (const Foo& v) { x_->Add(v); return *th</class>…

cmake で bcc582 と vc141 一気にビルド

1本の CMakeLists.txt と数本の短いバッチフィルで、2つのコンパイラ bcc582 と vc141 をそれぞれ使って、さらにそれぞれの debug バージョンと release バージョンを一気にビルドするためのメモです。今後付け足していく予定です。ディレクトリ構造 . ; ソ…

Windows で ionice

Windows で、ビルド(特にリンク)とかディスクアクセスが多い処理をさせている最中、他の作業をやろうとしてもディスクアクセスが遅くてイライラすることがありませんか?CPUの優先度を下げるのは start /low や cygwin の nice を使えばできますが、IOの優先…