2009-01-01から1ヶ月間の記事一覧

アロケータの使い方

作成したアロケータの使い方 #include <vector> // 64バイトアラインメントでメモリ確保を行うvector std::vector<char, CAllocator<char, 64> > buffer;</char,></vector>

アロケータの作り方

STL標準のstd::allocatorには、アラインメントを操作する機能がないので 確保したいメモリのアイランメントを設定したい場合、自前でアロケータを作る必要がある #include <malloc.h> typedef unsigned long uint32; // デフォで4バイトアラインメント template <class T, uint32 N = 4> class</class></malloc.h>…

セーブとロードでの型違いは×

固定長のものはセーブとロードが同一環境であるならば、構造体にして その構造体をそのままセーブ、ロードすることで問題ない。 しかし、可変長のものはそうはいかないので、可変した際の数やらなんやらを保存しなくてはいけない。 今回、std::mapを使ってい…

戻り値ありの関数で

値を返さない(return;)は未定義動作だ。 大抵のコンパイラは警告を出してくれるから、気付こうね。

ひどいプログラムを見た

こんなのがあった。一瞬何をやっているかわからなかった。 if (IsHoge()) { // いろいろ } else if (IsHogeHoge()); else { // いろいろ } 普通こうだろ if (IsHoge()) { // いろいろ } else if (!IsHogeHoge()) { // いろいろ }

メモリプールを活用しよう

メモリが非常に厳しい環境でゲームを作る場合、最低でも1つメモリプールを作成しよう。 グローバルnewやmallocは通常のメモリからメモリを確保し、画像やサウンドなど メモリ消費が多いものはメモリプールを使うようにする。 そうしないと、メモリの断片が発…

メモリが少ないときは、std::mapよりstd::vectorを使用しよう

現在サウンドノベルを作成しているのだが、すでに一度通過したことがある場所は スキップを行うことができるようにするという処理を導入する場合、スクリプト命令一つにつき 変数一つを用意して0を代入しておき、通過したら1を代入する。 スキップ処理の開始…

std::vectorのメモリ解放

vecotrで確保したメモリは、clearメソッドを呼んでも解放されず デストラクタが来るまではずっとメモリを確保している。 そこで、以下の方法で解放することができる。 std::vector<int> hoge; // hogeのresizeとclearを繰り返す。 // 解放 std::vector<int>().swap(hog</int></int>…

2009年の抱負

2009年の抱負は、ダイエットと質素倹約である。 ダイエットは早くも挫折しそうだが、質素倹約はいい感じである。 今のペースだと給与の3/4は貯蓄できそうだ。 抱負の追加として、この日記を一日一回更新にしようと思う。 以前は携帯電話のプログラムだったの…