簡易メモリアロケータ

最近面白そうな機能満載の携帯がいっぱい出てきて、意味無く携帯を新しくしたいです。どっちかっていうと、時間潰しができて遊べる携帯(^^;;; 早くDOCOMOからiPhone出てくれないかな~。坂本龍一がCMやってたSamsungも良いなぁ。面白そうなやつは全部ソフトバンクなんだなぁ~。DOCOMOももっと変わったもん出して欲しいなぁ。

そんなことはさておき、

ローカルスコープ内で、使い捨てみたいな使い方をするような小さなメモリを確保するとき、たとえば、Win32APIでなんらかの文字列を受け取るときのバッファとか、いちいちnewでメモリ確保して、使い終わったらdeleteして・・・が面倒くさい。特にC#を覚えてnewしっぱなしでdeleteする必要がない言語に慣れきってしまうとC++は非常にやりづらい。

と、かなり前に思って、以前ずっとかなり前にWin32APIの勉強のため書いていた簡易メモリアロケータを引っ張り出してきて、ちょこっと手直し。

正直、メモリアロケータなんて大層なもんじゃなくて、コンストラクタでnewしてメモリを確保して、スコープから抜けるとデストラクタでdeleteする、という超簡単なもん。

手直ししたのは、コンストラクタとデストラクタでメモリの確保と解放する際に、newとdelete演算子を使わず、Windowsの Heap系のAPIで置き換えたことと、& 演算子をオーバーロードして、内部バッファのポインタを返すようにしたことの2点。Advanced Windows のメモリ管理を参考に参照カウンタも付けてみました(^^;

ほとんどサンプルと同じになっちゃった(^^;

具体的には・・・

CAllocator alloc(MAX_PATH); //MAX_PATHバイトのメモリ確保
CAllocator allocs[5] = {100,100,100,100,100}; //配列とか、
CAllocator alloc; alloc->Alloc(100); //などでメモリ確保
CAllocator alloc; alloc.Alloc(100); //などでメモリ確保

メモリブロックのポインタを得るには、*演算子。

LPSTR lpStr = reinterpret_cast<LPSTR>(*alloc);

スコープを抜けるとデストラクタがコールされて、メモリが解放。参照数がゼロになると、プライベートヒープハンドルも解放。

修正すべき欠点は、スレッドセーフじゃない。複数スレッドで使用すると参照カウンタとかで競合が起きるし。大きなメモリ(たとえば1MBとか)を確保したいときとかは、VirtualAlloc系を使うべき、らしい。
まぁ・・・スレッドをおこすようなプログラムは複雑になればなるほどC#の方が安全で簡単なんで。

追記) &演算子で確保したメモリのポインタをリターンしてますが、スコープを抜けると問答無用でメモリ解放してしまうので、気をつけないといけません。CAllocatorを動的に確保すればいいんでしょうけど、それだと意味がなくなる(^^;

これをベースに実用的に使えるまで改良していきたいと思います。


8月30日、ところどころ修正しました。

電子のペーとパー

9.7型電子ペーパー搭載のドキュメントビューワ

9.7型電子ペーパー搭載のドキュメントビューワ

http://pc.watch.impress.co.jp/docs/2009/0312/brother.htm

林家ぺーとパー子は要らないけど、これは何気に欲しい。

今までのドキュメントビューアからすれば、なかなか機能充実。ただ価格が・・・。こういうドキュメントビューアって、モノクロだと1~2万円ぐらいにならないとまず普及しないと思うんですが・・・微妙だな。

かなり以前から電子ペーパーって注目しているんだけど、まだまだ高価。気軽に買えるぐらいのフルカラーの電子ペーパーなんてあと何年かかるんでしょうかねー?

大判プリント

午前中、チマチマと編集作業していたら、会長より連絡あり。Photoshop CS4で写真をプリントするので仕方を教えて欲しい、との事。昼過ぎから本社へ~。

何かのグループ展に写真を出すみたいで、大きく引き延ばしたいとのことで、会社の大判インクジェットプリンタ、エプソンのPX-9000で出力。

さすがにA1ノビで出力すると、時間がかかります(^^;;;

A1プリント with EPSON

A1プリント with EPSON

1200万画素の画像でA1まで拡大すると、汚くなるかなぁ~、とか思ってましたがそこそこキレイすね。さすがに近くで見ると解像感がないのがバレバレですが・・・2400万画素だと十分すねぇ。

PhotoshopCS4の簡単な操作と、プリント出力手順を説明して、会長に満足してもらって完了です(^^;;;

しかし、MAX ART、デカイ。インクカートリッジもデカイ。1色でだいたい5~6千円で、8色で4万? A1や最大サイズのB0サイズの光沢ロール紙とか一体いくらするんだろう・・・・。

6年ぶりに

会社からちょっとだけお小遣い(笑)を頂いたので、久しぶりに東京のイベントに遊びに行ってこようかなと。お小遣いっ!っつっても、往復の旅費にも満たないんですが(^^;;;、滞在費ぐらいにはなるし。

今月下旬に開催されるPIEを6年ぶりに覗いてこようかなぁ~と思ってます。まだ分かんないけど。

新しい目玉製品がないのはちと残念ですが、ソニーから発表された新レンズもちょいと見られればなぁ~、なんてことも考えてます。ミラーレス一眼もちょっと面白そうだし。

6年前のフォトエキスポ

6年前のフォトエキスポ

それに、同じビックサイトで東京モーターサイクルショーもあるみたいで、「一粒で二度おいしい」みたいな(^^;;; ん~・・・まぁ行くとしても、やっぱり体調次第になってしまうのですが・・・。行きたいなぁ。

シェルエクステンション

以前に作ったクリップボード関連のツールをシェルエクステンションで実装しよう、と思って長い間放置していたんですが・・・昼休みと、昨日、今日帰ってから寝るまでの時間で突貫工事で仕上げました(^^ ついでにテキストファイルの内容をコピーする機能も追加。なかなか重宝してます(^^

CF_TEXT2File

CF_TEXT2File

処理の中心となるクリップボードの処理は既に作ってあったので、後はシェルエクステンションのコンテキストメニューハンドラを実装するだけ・・・すぐできると思ってましたが・・・デバッグが思うようにできなくて時間がかかってしまいました。一度エクスプローラ上で右クリックしてコンテキストメニューを出すと、そのエクスプローラ・プロセスを終了させないとシェルエクステンション本体(DLL)を上書きできないので非常に面倒。しかも・・・不用意にデスクトップを右クリックしてしまうと・・・デスクトップ(エクスプローラ)の再起動がかかる・・・

で、やっと望む動作をして完成・・・したと同時に気付いたよ。

「Virtual PC 上のXPでデバッグすりゃいいじゃん!」

年取るのは、いやだねぇ(ーー;;;

また、暇があったら、CF_HDROP フォーマットにも対応させよう。っと。