タグ

C++に関するdenimuのブックマーク (3)

  • 高速固定長アロケータ - ゲーム作ろうよ

    概要 newとかdeleteってもの凄く重いですよね。 何故かって割り当てられる領域を探すのに時間がかかっているんです。 OS側でメモリを管理しているわけですが、色んなシステムが割り当て要求をしてきます。 さらに大きさがバラバラなので、割り当て取り消しを繰り返しているうちに虫い状態になります。 そこでOSさんはメモリから要求サイズより大きい場所を探します。 デフラグするということもありますが、そんな時間ももったいない。 弾幕系のSTGなんか弾の生成削除でnew/deleteしていたらfpsなんて激減ですよ。 そこで ある程度大きいサイズをあらかじめ確保しておいて、固定された大きさで大雑把に割り当てを行いましょう。 制作方針 今回のポイントはメモリプールとplacement newです。 また、空きのインデックスを持つことで、空きを探すための線形検索が発生しないので高速です。 templa

    高速固定長アロケータ - ゲーム作ろうよ
  • スマートポインタ(参照カウント型) - ゲーム作ろうよ

    概要 C/C++の話なんですが、メモリ管理ってめんどくさいですよね。 誰が生成して誰が消去するのか、2度もdeleteすると危ないです。 そんなわけで、自動的に解放してくださるクラスを作りましょう。 制作方針 C/C++templateの機能を使って実現します。 以下の項目が若干不便ですが、ものすごく便利です。 宣言及び定義はヘッダに書かないといけない。 typenameなどがめんだくさい。 その代わりに柔軟性に富んだシステムを設計可能です。 今回は参照カウンタと言うものを定義してコピーのような処理の場合は オブジェクトを使いまわすような方法で対応しています。 ダウンロード サンプルソース #ifndef _SMART_PTR_ #define _SMART_PTR_ #define SAFE_DELETE(p) if(p){delete p;p=0;} //--------------

    スマートポインタ(参照カウント型) - ゲーム作ろうよ
  • 状態遷移の柱「簡易シーケンス1」 - ゲーム作ろうよ

    ゲーム制作で全体像を考えるのは簡単なようでちょっぴり難しい。 プレイの流れがあっちこっちに行って制御しにくいというように(汗 そんなわけで、初心者の悩みの種であるシーケンスの攻略法です。 順番に並んでいること。または、並んでいる順番で処理を行うこと。処理の順番の並びやデータの順番の並びなどもこれに当たる。対義語はランダム。 デジタル用語辞典 シーケンスというのは、主に状態の流れのことを指します。 ゲーム制作には、「タイトル画面の状態」「バトル状態」「ゲームオーバーの状態」など様々な場面が存在し、それらをうまく操り動かす必要があります。 そこで、オブジェクト指向の特徴である多様性(ポリモルフィズム)を使う簡単な状態遷移を紹介します。 多様性は、派生したクラスが派生元のポインタを利用できるという話です。 派生元のクラスが持っていた関数を派生したクラスが定義しなおすことで 派生元のポインタにキャ

    状態遷移の柱「簡易シーケンス1」 - ゲーム作ろうよ
  • 1