続々 コンパイラのメモリ使用量

試行錯誤の結果、binary_read/writeで使用しているmember_offsetがメモリ食いの原因であることが分かりました。

template<class T>
struct member_offset
    : boost::mpl::size_t<
        boost::mpl::accumulate<
            boost::mpl::iterator_range<
                typename boost::mpl::begin<
                    typename struct_traits<typename T::struct_type>::members
                >::type,
                typename boost::mpl::find_if<
                    typename struct_traits<typename T::struct_type>::members,
                    boost::is_convertible<boost::mpl::_1,T>
                >::type
            >,
            boost::mpl::size_t<0>,
            boost::mpl::plus<
                boost::mpl::_1,
                member_size<boost::mpl::_2>
            >
        >::type::value
    >
{
};

見るからに重そうです。
しかもこれは構造体のメンバ毎に呼ばれます。


実際の読み書きの際は、各メンバのサイズだけポインタをずらしていけばオフセットを求める必要はないため、member_offsetを呼ばないよう修正しました。
binary_io.hppの差分
この修正でコンパイル時のメモリ使用量は700MBから220MBに減りました。
これでスワップせずにコンパイルすることができます。
テスト時間も短縮できそうです。

TortoiseSVNでエクスプローラがクラッシュする件

Vistaエクスプローラがよくクラッシュするのでいろいろいじっていたのですが、TortoiseSVNが原因のようです。
http://tortoisesvn.tigris.org/servlets/ReadMsg?list=users&msgNo=5167


2007/2/2現在、修正版がリリースされていないのでVistaナイトリービルド版を使ってくれとのことです。
http://nightlybuilds.tortoisesvn.net/1.4.x/win32/

(02/05 追記)
バージョン1.4.3で修正されました。