タグ

メモリと配列に関するiwwのブックマーク (5)

  • PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記

    PHPPythonRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 稿では3言語の連想配列の従来実

    PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記
  • その12 イテレート中のSTLのlistから要素を安全に削除する方法

    ホーム < ゲームつくろー! < Programming TIPs編 その12 イテレート中のSTLのlistから要素を安全に削除する方法 STLのコンテナは「イテレータ」によって要素を取り出します。この時良くあるのが「ある要素をチェックして、必要が無くなった場合はリストから削除する」という作業です。例えば描画オブジェクトのリストからもういらなくなったオブジェクトを除く時などこの作業が必要になります。 イテレート中のリストから要素を除く場合、ちょっと注意しないと思わぬバグが誘発します。この章ではイテレート中のリストから要素を除く方法をまとめます。まさにTIPsです(^-^;。 ① まともにやるとあっさりバグ 例として、int型のリストに0~9までの要素がこの順番で登録されているとしましょう。このリストをイテレートして「5」を取り除きたいとして、次のようなコードを書きました:

  • 3.3.5.1 関数の引数としての可変長配列

    関数に渡す配列の大きさを, 関数に渡す引数で与えられる. // 以下は C99 のプログラムです. #include <stdio.h> // 配列の大きさを関数宣言で決められる. void func(int m, int data[m]) { int i; for(i=0; i<m; i++) data[i] *= 10; } int main(void) { int n, i; n = 10; int x[n]; // 配列のサイズを, プログラム実行時に与えられる. for(i=0; i<n; i++) x[i] = i; func(n, x); for(i=0; i<n; i++) printf("%d\n", x[i]); return 0; } ただし, 配列dataの大きさを決定する時点で, 大きさmが決まっている必要がある. 関数宣言は前から順に評価されるので, 上の例では

  • プログラミング言語 C の新機能

    4. 配列 今回の C 言語では、配列をより使いやすくするための機構が組み込まれました。その代表が可変長配列の機能でしょう。章ではそれら追加機能について説明します。 4.1 可変長配列 ある関数に入る毎に違った大きさが必要になる配列(可変長配列)を、今まではどのように作成していました? その作成方法は、大体次に挙げる方法のどれかでしょう。 (1)あらかじめ最大の配列を作る方法。もし最大の大きさを見積もることができるのであれば、あらかじめその最大の大きさの配列を作ってそれを利用するという方法があります。しかしこの方法では最大が見積もれる時にしか使用することができず、また必ずしもメモリを有効に使用することができません。 (2)malloc を使う方法。必要となる大きさを malloc で確保し、ポインタに割り当てて使うという方法があります。しかし、この方法では、一般的に malloc 関数の

  • Codian - ポインタと文字列とCStringと

    更新日: 2007/11/19 動作確認環境:Windows XP Professional SP2, Visual C++ 6.0 Professional SP6 サンプルプロジェクト(Visual C++ 6.0): MxA09_VC6.zip サンプルプロジェクト(Visual C++ 6.0用、サンプルプログラム13のみ): MxA09_Unicode_VC6.zip 最後は文字列についてです。 MFCにはとても便利なCStringクラスがありますが、それをどう使えばいいのか、やや遠回り気味に説明したいと思います。 ちなみに文字列やポインタについては、Codianの「ポインタ」でも解説していますのでそちらもどうぞ。 C/C++言語の文字列型 なんてものは存在しません!! Visual Basic他、多くの言語は簡単に文字列を操作できる「文字列型」を持っていますが、C/C++言語に

    iww
    iww 2010/06/15
    恋しさとせつなさと心強さと
  • 1