C/C++ゲーム製作総合スレッド Part7 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2015/01/11(日) 10:19:31.85ID:RDQlUyF+
ゲーム製作におけるC/C++全般に関するスレです。

元スレ
DXライブラリ 総合スレッド その18
http://peace.2ch.net/test/read.cgi/gamedev/1399459468/

前スレ
C/C++ゲーム製作総合スレッド Part1
http://toro.2ch.net/test/read.cgi/gamedev/1337516528/
C/C++ゲーム製作総合スレッド Part2
http://toro.2ch.net/test/read.cgi/gamedev/1351015269/
C/C++ゲーム製作総合スレッド Part3
http://toro.2ch.net/test/read.cgi/gamedev/1357899040/
C/C++ゲーム製作総合スレッド Part4
http://toro.2ch.net/test/read.cgi/gamedev/1376262450/
C/C++ゲーム製作総合スレッド Part5
http://peace.2ch.net/test/read.cgi/gamedev/1389798031/
C/C++ゲーム製作総合スレッド Part6
http://peace.2ch.net/test/read.cgi/gamedev/1404815419/
2015/02/02(月) 04:07:49.86ID:lvNA0Ulc
テンプレート使って移植性が下がるってここの住民は一体いつの時代に生きてるんだろうか
2015/02/02(月) 08:53:14.68ID:9YOvsS+B
俺もテンプレート自体使わないな
過去の遺物だろあれ
2015/02/02(月) 09:10:16.63ID:QEPcxUVH
>>216
ダメだこいつ…早くなんとかしないと
2015/02/02(月) 09:50:21.86ID:pbbvOQ2U
VSのバージョン上がるたびにどこかしらテンプレートで書いたところの書き直しが待ってるんだよな
MPLに手を出すと他の処理系でまた違う方言で困るし
2015/02/02(月) 10:05:53.54ID:ZKghX0zO
バージョン上がるたびに、ってほどテンプレートに手入ってたっけ?
むしろ、いままでコンパイルを通すためにいちいち">"と">"の間にスペースを入れていたのが
入れる必要なくなったとか、そういう方面の変更しか知らないんだけど
2015/02/02(月) 10:33:54.29ID:TF5MhFQ8
だいぶこなれてきたから、できないことができるようにはなっても、逆は無いと思うぞ
確かにC++03時代は typename が急に必要にされてエラーになるのはあったけど

気になるなら互換性を吸収するラッパーとしてboostを使うのも手だな
2015/02/02(月) 11:10:10.63ID:pbbvOQ2U
最近変えたところだと
enable_ifが無い頃の代替としての部分特殊化のコードが
2012では通ってたのに2013でC2753で通らなくなって
代わりにenable_if使えるからそれになって
2015でconstexprあるからそこはテンプレート要らないだろうなて状態だわ

なんでエラーなのか追いかけるの面倒だから新機能で凌いでる
boostのを最初から使えばいいんだけどライブラリのバージョンアップが面倒でね
2015/02/02(月) 11:30:47.44ID:uEPb5G0x
テンプレートが悪いというよりVSの実装が
2015/02/02(月) 12:44:55.25ID:QEPcxUVH
STLもテンプレートなのに
2015/02/02(月) 13:21:17.62ID:ZKghX0zO
SFINAE周りは確かに、C++11でようやく統一仕様が策定されて多少手を付けやすくなった印象がある

>>223
テンプレートを使ってるライブラリを使うのと
テンプレートなクラスや関数を自分で作るのとは
結構隔たりがある気がする…
225名前は開発中のものです。
垢版 |
2015/02/02(月) 13:54:32.94ID:fu9cgs9q
スタンダードテンプレートライブラリ(の構想・実装)が先にあってC++で実装するためにテンプレートが導入された。テンプレートはSTL実装のための道具といえる。


Standard Template Library - Wikipedia

STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。

当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
それをサポートする最初のメジャーな言語はジェネリックユニットの機能があるAdaであった。

1987年までにステパノフとマッサーはジェネリックプログラミングの研究成果としてAdaのリスト処理ライブラリを開発してリリースしていた。
C++は当時まだ言語として未成熟ではあったものの(テンプレートはまだなく後から実装された)、より広く普及してジェネリックプログラミングの良好なサポートが提供される可能性が高いと考えられた。
2015/02/02(月) 14:52:33.01ID:bbrlQEEY
で、結局>>200はuintの減算でオーバーフローしてるってことでいいのか?
int - uintがintにキャストされれば大丈夫そうな気がするけど
2015/02/02(月) 15:26:46.03ID:u58PP6hj
桁あふれや型違いの時に起こる超数値に見える
2015/02/02(月) 16:37:35.11ID:lvNA0Ulc
そんな問題じゃねーよさんが解決してくれるさ
2015/02/02(月) 17:14:57.39ID:ZKghX0zO
直接的な解決策や原因は分からないけど、俺なら
・「unitList.size()*140」を「unitList.size()*140.0f」にして直るか確認する
・set/getPositionXを通さなかったらどうなるか確認する(当該メンバ関数の実装が自明である場合を除く)
・コンパイラの警告設定を最強にしてみて、何かメッセージが出るか確認する
あたりをやってみると思う
2015/02/02(月) 18:13:33.41ID:NKDBUGQv
で、ゲーム制作だと意識して。
開発環境を開発中やデバッグ中に更新するとか無いだろ
移植で困ることは判る
2015/02/02(月) 18:39:29.29ID:u58PP6hj
新しい開発環境に新規実装された要素どうしても使いたかったんだ…と推測(適当)

CやC++とはあまり関係ないけど、
一部の開発環境では、関数や変数を書いた行にコメントしとけば
カーソル合わせるだけでコメントが出るのでメモ代わりにできるな
なおソースがコメントだらけになり、よそに貼った時に失笑物のソースになる模様
2015/02/02(月) 19:31:16.34ID:lvNA0Ulc
http://ideone.com/3SPXKz
ほぼ答えのヒント張っても理解できてないアホがいっぱいいるんで再現させてやったぞ

>>207
で、どんな問題だったんですかね?
2015/02/02(月) 20:49:55.23ID:0Y8pqiU9
色々試してみたけど、オーバーフローしたuintを直接floatにキャストするのがダメっぽいね
一回intにキャストすれば大丈夫だった
int - uintはintになるってわけじゃないのね

テストコード
#include <iostream>

int main()
{
int i=3;
size_t ui = 5;

float x = i-ui;
float x2 = i - static_cast<int>(ui);
int x3 = i - ui;
float x4 = static_cast<int>(i-ui);

std::cout << x << std::endl;
std::cout << x2 << std::endl;
std::cout << x3 << std::endl;
std::cout << x4 << std::endl;
std::cout << static_cast<float>(i-ui) << std::endl;
}
2015/02/02(月) 21:20:46.80ID:lvNA0Ulc
>>233
intで表現出来ない値をintへcastしたら桁あふれで未定義動作
2015/02/02(月) 21:33:08.99ID:MkYgWBqp
>>234
未定義になる可能性のある演算は暗黙のキャストしてくれないって事?
2015/02/02(月) 21:39:18.84ID:lvNA0Ulc
>>235
違う
intとunsigned intの演算結果はunsigned int
もちろんunsigned intはマイナスを表現出来ない、なので0-1uはUINT_MAXになる。(符号無し整数は桁あふれしても未定義動作ではない)
でも符号あり整数の桁あふれは未定義動作なのでUINT_MAXをintへキャストするのは未定義動作
まぁ大抵の処理系では動くだろうけど。
2015/02/02(月) 21:57:25.95ID:MkYgWBqp
符合ありなしで演算すると符合なしになるのか
なるほどねー
2015/02/02(月) 22:39:56.06ID:4aJa1XJJ
混ぜるな危険
2015/02/02(月) 22:40:47.51ID:AAW+YNQa
>>238
いいねw
2015/02/03(火) 00:10:07.19ID:0Nhy8xyl
これそもそも size_t が unsinged int なのが悪いんだよな、頭悪すぎ
2015/02/03(火) 02:08:59.87ID:YnXnr0TR
size_tはsizeofで測ったデータの長さを受け取る物だからよ
データの長さに0未満はあり得ないから定義できないようにしてるんだろう
2015/02/03(火) 04:00:41.53ID:WscpFvcA
質問です。
抽象クラス(親クラスとする)を継承した派生クラス(子クラスとする)を
親クラスの型のメンバー変数に子クラス型でnew()し、抽象化して保持してます。

このメンバーをdelete してすぐNULLを代入しても、参照が残ってるみたいで
エラーでる場合があります。

抽象化しているオブジェクトの削除の、お作法みたいなものってありますでしょうか。
2015/02/03(火) 04:32:33.06ID:UaiJdd2F
>>242
スレ違いです
こちらへどうぞ
http://peace.2ch.net/test/read.cgi/tech/1420379468/
2015/02/03(火) 04:40:14.90ID:WscpFvcA
>>243
ありがとうございます。
2015/02/03(火) 13:03:57.60ID:vrraL4+G
スレはあってるけど板が違う的な。
まあ、ゲーム関係かどうかの境目って結構曖昧だけれども。
2015/02/03(火) 13:07:01.87ID:IeF+/7iv
いずれにしろコードもなしに質問されてもエスパーしか回答出来ないですし
2015/02/05(木) 07:36:31.37ID:gQYa1HB0
開発期間が長すぎて、開発環境が何度も変わるのってどう思いますか?
開発環境を固定する?それともコードを書き直して対応する?
2015/02/05(木) 08:11:52.44ID:6fCmneha
boost辺りならまだしも、言語自体のバージョンが上がるまでって
一体どんだけ開発期間が長いか間が悪いんだよ…

どうしても使いたい追加要素でもなければ変えない トラブルの素
2015/02/05(木) 09:22:24.85ID:JByM0e2E
CSのSDKとかじゃないの?
開発序盤なら対応、終わりが見えてたらそのままってのが普通だと思うけど
2015/02/05(木) 10:05:22.41ID:tVSHsnYT
昔VS2008から2010に上げたけど特に問題は起きなかった
2015/02/05(木) 12:20:47.44ID:qWgtWrzH
vsの2005から2012に上げたら、Releaseでは動くけどdebugでは動かなくなった
自前で作ってた文字列クラスが弾かれたから、現在、std::wstringに置き換え中
2015/02/05(木) 17:18:01.03ID:grWdPzSP
>>247
何年にもわたって開発を続けていくようなものなら
あんまり気にせずに変えちゃう
2015/02/05(木) 19:05:51.48ID:IWRqO40R
iOS向けなら変えざるを得ない
2015/02/05(木) 19:45:56.22ID:ckteJ+s1
プロの人も来てるのかも知れないけど、同人ならぶっちゃけ
DirectX9辺りの技術基盤があれば十分じゃないの。

新技術に取り組むこと自体が目的化して、ゲームを完成させる方が
疎かになってしまうって、何かありがちな気がする。
2015/02/05(木) 22:51:52.09ID:EoFgZ44U
別に必要ないなら使わなければいいんです、エロい人にはそれが分からんのです
2015/02/06(金) 08:51:59.99ID:J5odCBuG
だまれ朝鮮人
2015/02/06(金) 08:53:55.71ID:u5/2KnVF
idがバグ
2015/02/06(金) 09:00:23.95ID:12AknHRs
>>254
DirectXがそもそも出来ない人が話に混じってるだけだから気にしない方が
DXライブラリ程度でいいんじゃないかな?同人なら
自作ライブラリ作れる人ですら少ないよ
2015/02/06(金) 11:05:36.91ID:vDg1pnk8
面白けりゃ何でもいいんだよ。
2015/02/06(金) 14:58:45.96ID:1vhL8u+G
もとの環境で大体完成していたのに、
無理やり次世代機用に作り直そうとしたがうまくいかず、
そのまま爆死した家庭用機向けソフトのプロジェクトなら知ってる
2015/02/06(金) 17:34:24.75ID:12AknHRs
>>260
RomからCD-ROMへの移植は苦労が多かった
ROMの容量が4Mバイト超えてるとRAMご足りなくなって、動的に入れ換えしようとするとリソースのマネージメントが大変だったから
2015/02/06(金) 22:49:06.68ID:qIQhbqny
しかもそれだけ苦労したにもかかわらず、ロードが遅いと文句言われたに違いない…。
2015/02/07(土) 13:13:21.00ID:uCqCiOK0
>>260
PS3だな そうに決まってる
2015/02/07(土) 13:42:24.95ID:buz4BGGO
>>251
置き換えたらさらに別の場所が動かなかったから2013へと移行したりw
いや、ネットでは動くコードと書かれているんだよ、2013からは動くと
うちのPCで2013はマトモに動くかな?今インストール中だが
2015/02/07(土) 14:45:09.34ID:84N483gz
ヘッダで前方宣言したはずのクラスがCandidates are: struct SimpleAudioEngineとエラーを出され
定義でreference to 'SimpleAudioEngine' is ambiguousとエラーを出されます
ヘッダではポインタしか使ってません
思うところがあるとすればSimpleAudioEngineの名前空間をusing namespaceしてるぐらいです
2015/02/07(土) 14:58:01.00ID:tCXnt3yJ
>>265
http://melpon.org/wandbox/permlink/8WYv9UpPeF3DROcf
2015/02/07(土) 16:04:21.06ID:ns5GMSPv
異なる名前空間の中で前方宣言すると別物だとみなされて
あとでusing namespaceすると区別できない
2015/02/07(土) 19:26:49.25ID:buz4BGGO
開発環境をvs2012からvs2013に変更したのは大当たりだった
エラーの位置は分かりやすくなったし、デバッグ機能は大幅に強化されてるし、
文字列クラス(std::wstring)は扱いやすくなったし、全般的に軽くなった
2015/02/07(土) 20:51:50.60ID:G8afa58Z
std::wstringって何か変更あったっけ?
2015/02/07(土) 23:10:30.01ID:buz4BGGO
operaterがほとんど対応してなかったんだよ。
+=はあるのに+は無いとか、map<wstring,wstring>で使えないとか。
271名前は開発中のものです。
垢版 |
2015/02/07(土) 23:18:38.16ID:17zrnW4A
ためしてないがそれはないだろ。
あとSTLやC標準ライブラリ、C++標準ライブラリは備え付けのを必ずしも使う必要がない。
実装は多数ある。
2015/02/07(土) 23:55:35.77ID:tCXnt3yJ
たまたまインストールされてるのがVS2012だったから試してみたが普通に使えた
2015/02/08(日) 00:06:03.58ID:uih1DHvo
あれ?って事は、vs2005を後から入れたせいでおかしくなってるのか??
2015/02/08(日) 00:15:39.03ID:uih1DHvo
UMLのツールを買ってみて、たまたま家のVSで対応してるのが2005だけだったから、
後からインストールし直したんだよな

そっか、VS2005のコードでC++のコードが上書きされてたか
2015/02/08(日) 00:52:07.50ID:iVwSBW/g
とんでもない話だなw
2015/02/08(日) 01:13:03.19ID:sR/2PkWV
VC6でもoperator+位あったような気もするけど
不便な所は連続したメモリ領域の保証が無いから
実装上はともかく厳密にやろうとするとvectorじゃないとダメな所
2015/02/08(日) 09:15:03.02ID:dvv+ci6w
連続領域かどうかに関しては
- vector C++03/11 → 連続保証
- string C++03 → 実装依存 / C++11 → 連続保証
らしいぞ。 最近のVCなら大丈夫なんじゃないかな。
2015/02/08(日) 13:48:18.26ID:vuQZMEzS
連続性が保証されるようになっているとはな
外見は変わらなくても内部は少しづつ変わってるんだな
2015/02/08(日) 13:51:09.60ID:iVwSBW/g
地味ではあるが重要なことだな。
2015/02/08(日) 13:58:02.91ID:uih1DHvo
mallocのメモリ配置はOSで変わるんじゃなくてコンパイラで変わるみたいやね
2015/02/08(日) 15:05:56.00ID:OpMqb989
依存するのはコンパイラじゃ無い
ランタイム依存
2015/02/09(月) 20:39:13.54ID:q5WWprzE
なんにせよ、ポインタはむやみにいじらない方がよさそうね
2015/02/10(火) 22:00:30.08ID:Lg1oqTmd
ポインタは使い勝手がわかると色々出来るが、無くても問題無くなってきてるからなぁ……
2015/02/10(火) 23:49:52.25ID:2hfNPcff
それなりのもの作ろうとしたらアロケーター自作になるゲーム制作はポインタ必須なんじゃないの
2015/02/10(火) 23:59:52.09ID:m/pIKos0
プラットホームによるとは思うが、いまだにカスタムアロケータなんて使うのか?
OSや言語処理系を書いているわけではないだろうに
2015/02/11(水) 00:01:51.67ID:7TGiUCxx
車輪の再発明が好きなんだろ
2015/02/11(水) 00:26:12.68ID:IKslX+U4
流石にOSデフォルトのアロケーターは使わないんじゃないの
ライブラリのメモリプール使うにしてもポインタは使うだろうし
288名前は開発中のものです。
垢版 |
2015/02/11(水) 00:38:39.31ID:5bVnp7SH
アロケーターはC言語かSTLのやつのことだろ?
OS自体のメモリ管理はOS自体のソースからビルドしないと変更むりでは。
2015/02/11(水) 00:41:52.28ID:IKslX+U4
普通にnew、deleteしたらOSのAPIでメモリ確保するんでないの?
STLはどうかわからんけど
2015/02/11(水) 00:51:21.24ID:rJC6nJDr
>>288
mallocの置き換えぐらいリンクするライブラリー変えるだけだよ
tcmallocでググれ
2015/02/11(水) 00:52:08.05ID:vZk9YDm5
new deleteの動作なんて実装によるとしか言いようがない
STLのstd::allocator<T>の話なら、単にnewとdeleteを呼び出す実装になってる
292名前は開発中のものです。
垢版 |
2015/02/11(水) 00:59:11.50ID:5bVnp7SH
mallocやnewを置き換えてもOSの命令を使ってたら
OS自体のメモリ管理の制約は受けるわけで。
OSと完全に独立できるものか?
OSが既に管理してるところを横取りしないとならないが。
2015/02/11(水) 01:01:23.93ID:WPu+kv42
ちょっと前に「ゲームの場合、出現オブジェクトの個数に上限を設けることが多いから
new deleteせず自分でプールを確保する手もある」という話をしなかったっけ。

とりあえずstd::allocator<T>で書いといて、あとでカスタム化してもよいのでは。
294名前は開発中のものです。
垢版 |
2015/02/11(水) 01:03:22.28ID:5bVnp7SH
malloc - Wikipedia

OSのカーネルでもアプリケーションと同様にメモリ確保が必要である。
カーネル内にもmalloc相当の関数はあるが、その実装はCライブラリのものとは大きく異なる。
例えば、DMA用のバッファには特別な制限が課せられることがあるし、割り込み処理でメモリを動的に確保したい場合もある。
このため、カーネルの仮想記憶サブシステムと密に連携した malloc 実装が要求される。
2015/02/11(水) 01:04:29.98ID:rJC6nJDr
余程特殊な用途でないかぎり既成の物使った方が速いから
2015/02/11(水) 01:06:40.34ID:IKslX+U4
自作アロケーターは最初に領域確保してその分を切り盛りするでしょ
ていうかそれ以外の作り方を知らない
2015/02/11(水) 01:06:46.81ID:rJC6nJDr
>>294
スレ違い
お前はゲームをOSから作るんか?
298288
垢版 |
2015/02/11(水) 01:16:23.87ID:5bVnp7SH
>>287に対して、自作アロケータ、マイアロケータってのは
ほとんどのケースで、OSデフォルト、カーネルアロケータに依存してるだろ?って反応なわけで。
2015/02/11(水) 01:32:15.63ID:rJC6nJDr
そうだな
>>287
が言ってるOSデフォルトってのが悪かった。
アプリケーションが使うメモリアロケーターの殆どの実装はライブラリが行ってる。
OSからシステムコールでブロック単位でメモリを貰いアプリケーション内で分配な。
2015/02/11(水) 01:41:17.25ID:IKslX+U4
すんませんVC++のメモリ確保がWin32APIの関数呼ぶだけって何かで見たからそういうもんだと思ってました
2015/02/11(水) 01:49:31.11ID:tga+SBCo
>>296
アプリケーションとしてのゲームはこれで確定だと思ってた
動的と言えば動的だけど都度都度確保はあり得ないって意味でこの手の話はスルーしてたけど、そう言うものでも無いみたいだと知ったわ
取れなかった場合の処理は思い付かないけど
302名前は開発中のものです。
垢版 |
2015/02/11(水) 01:55:07.09ID:5bVnp7SH
ヒープ、動的確保は丸投げに近いが。普通のauto変数とかは最初に確保した領域を使いまわす。



メモリの4 領域
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/img6.png
http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/MP/final/part06/node8.html

テキスト領域:機械語に翻訳されたプログラムが格納される. この機械語の命令が 1 行づつ実行されることでプログラムが動く。

静的領域:グローバル変数などの静的変数が置かれる。

ヒープ領域:メモリの動的管理 (C 言語の malloc 関数や C++ の new 演算子でメモリを確保すること) で用いられる。

スタック領域:今回の演習で扱ったように CPU のレジスタを一時的に退避させたり、また C 言語の自動変数 (多くのローカル変数) が置かれる。
2015/02/11(水) 02:24:49.00ID:COJ2IR9k
いわゆるメモリープールのようなものは既にランタイムに実装されてる場合もあるし
自分で実装する・しないは実行環境によると思う。
最近はこの辺のことは既に当たり前になってるのかどうか知らないけど、
検索してもあまり引っかからないね。とりあえず引っかかったところ
http://vcpp-ml.ldblog.jp/archives/1169943.html
ではVCのランタイムのソースみればとなってるので
興味ある人は読んでみては。
2015/02/11(水) 02:41:42.58ID:0cWu/C1d
俺が昔作ったベンチ引っ張り出してきた
10000個確保して解放を1セットで、10回繰り返す

malloc 0.0104349686516726 100
new 0.0170437163409596 163.332702856062
tlsf 0.0327989992535455 314.318138831095

右側がmallocを100とした場合の倍率。意外とtlsfは遅い。
んで下が自作のメモリアロケータでnewとdeleteをオーバーロードしてて
上で使ったnewするソースをそのまま使ってる。

fixpool 0.01086365697986310 104.108189899754
fixpool-ss 0.00270476282206395 25.9201815774541

アルゴリズムは一回使ったものをリストにつなげておいて、newのとき取り出すだけ。
ssは上限が分かっている場合で、先にメモリ確保するのでmallocを上回れる。

まぁ、はっきり言って速度だけを考えると自作アロケータの必要はないかなレベル・・・と思う。
確か、スマートポインタのベンチもどっかにあったはずなんだが、どこだったか・・・
2015/02/11(水) 02:52:05.14ID:IKslX+U4
>>303
ゲームエンジン&#8226;アーキテクチャ(ソフトバンククリエイティブ)によれば、デフォルトのnewが遅い理由は管理コストとOSのコンテキストスイッチとあるけど
URL先の内容からすると最初に確保された分越えなければコンテキストスイッチは発生しないって事なんかな
ていうか2000年の時点でそういう仕様だったのか
2015/02/11(水) 02:52:16.60ID:rJC6nJDr
>>304
その自作アロケーターって複数スレッドから呼んでも大丈夫なように作ってんの?
だったらたいしたもの。

今時モバイルですらマルチスレッドが当たり前だからベンチマークも複数スレッドで実行すべき。
スレッド使うライブラリーをリンクしないとシングルスレッド版のmallocとリンクする環境もあるし
2015/02/11(水) 03:06:07.85ID:rJC6nJDr
>>305
ライブラリが貧弱な環境だと効果はあったんじゃない?
ライブラリが貧弱で有名だったPS3とか。
ゲームエンジン アーキテクチャって本PS専門デベロッパーだった人の著書みたいだし
2015/02/11(水) 03:24:52.81ID:tga+SBCo
>>306
データ読み込みや通信で「now loading…」、ムービー再生とか以外でマルチスレッドって何に使うの?
いろんな判定でシングルでないと困らない?
俺はコンシューマ長すぎのせいか、マルチスレッド(タイムスライス型)は、そもそもゲームシステムとして実装が思い付かない
どうしてもタスク()で疑似マルチしか作れないや
2015/02/11(水) 03:29:13.74ID:0cWu/C1d
>>306
ポインタのつなぎ替えの部分に一応クリティカルセクション使ってる。
が、これのベンチがねぇ・・・
複数スレッドで同時に確保しまくって人為的にコリジョン起こしても、
シングルの場合と違って純粋な値が取れないので。
2015/02/11(水) 03:54:41.50ID:0cWu/C1d
スマポあった。同じく10000を10回。

new 0.00696283003770957 100
shared_ptr 0.039324851409757 564.782584046715

生ポインタとboostのshared_ptrね。
下が自作のリンク方式とカリカリにチューンした参照カウント方式のスマートポインタ。

link 0.0273835524999122 393.281932082318
count 0.0157994938635595 226.911956460117

これも、安全をとるなら生より多少遅くてもboostで十分と思う。
自作のスマポは労力の割にはねぇ。
2015/02/11(水) 04:10:32.63ID:0cWu/C1d
書き忘れてた。>>304はゲームに近いように
10000まで{ 4, 10, 20, 100, 208, 501 }のサイズを巡回して確保していってる。

>>310は同じオブジェクトをずーっと生成してる。
こうするとnewがなぜか結構速いんだけど、その状態で対決してみたかったので。
2015/02/11(水) 08:00:15.92ID:JqfHYvpf
んーなんか車輪の再発明がどんどん無駄になってくのな
必要な機能が既存のコードにあるなら、わざわざ作る必要は無い、みたいな
2015/02/11(水) 08:08:59.24ID:JqfHYvpf
自分は今は自作コンパクションを使ってるけど、これも誰かの作ったコードを流用した方が早い時代が来るのかな?
2015/02/11(水) 08:40:48.37ID:45+5SbHz
>>308
MTフレームワークの例
http://www.4gamer.net/specials/3de/lost_planet/lost_planet_04.shtml
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況