きままにブログスマートフォン用の表示で見るきままにブログプログラミングを主とした私のメモ帳です。寂しいのでコメントください笑この広告は、90日以上更新していないブログに表示しています。固定長メモリプールを再び作った。shared_ptrを自作し、速度の向上を図った。shared_ptrを使用するよりも2~3倍の実行速度が得られた。実装について簡易shared_ptrであるSharedPtrを使用することを前提としたメモリプールSharedPoolと、共有を前提としない、UniquePoolを用意した。それぞれは共通部分のPoolを基底としているがポリも―フィックな動作をしないのでvirtualにしていない。SharedPoolはその特性上、参照カウンタ及び親のポインタを保存するためのメモリを余分に確保していることに注意されたい。一方でUniquePoolはメモリ上のオーバーヘッドはないが、UniquePtrを使用するためのオーバーヘッドが幾分かある。簡単に言うと、大きなメモリブロックをリンクリストでつないでそこから切り出し、使わなくなったメモリはstd::stackにいれて再利用をしている。ページの減少は実装していない。参照カウンタ方式はPointerクラスとしてその実態と参照カウンタを合わせてこれを単位とする。メモリの切り出し1回につき参照カウンタも一緒に生成するためコストの低減に繋がる。(5)}まず、(1)でひとまとまりのメモリを確保する。初期値は128個であるが、テンプレート引数に入れることで可変に出来る。今回の実験ではこれを変えたところであまり優位な差は得られなかった。(2)では簡易スマートポインタの型を取得している。各プールごとに型が異なるので、必要ならばこのようにする必要がある。(3)では32個のスマートポインタを保存する配列を作っている。今回はこの配列に生成したデータをランダムに入れて検証している。この例では(4)でデータを生成し、(5)でランダムに配列に突っ込む。ある場合は参照カウントが0になって消滅し、新しいオブジェクトが入ることになる。従って高々32個のオブジェクトしか存在し得ないことになる。latest)で実験を行った。58[ms]このようにメモリプールを使用すると確保の時間が低減される。大量のオブジェクトを使い回すようなプログラム、すなわち個数の上限はある程度決まっているが、寿命が異なる場合などには有用だと思われる。スマートポインタを使用しないでnew-delete/メモリプールの比較、unique_ptr/メモリプール&UniquePtrの比較も行ったが、いずれも当たり前なのだがメモリプール仕様の方が2~3倍高速に動いた。関数型言語では関数が第一級の値という。)はてなブログをはじめよう!staryoshiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。