AUTHOR: schwarz1009
TITLE: プログラミングについて
BASENAME: 2021/03/27/160817
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 0
DATE: 03/27/2021 16:08:17
CATEGORY: プログラミング
リエントラントとは再入可能という意味で、
あるプログラムの実行中に同じプログラムを起動できるかどうか。
ローカル変数を使う場合には、
リエントラントでなくなることはないが、
グローバル変数やstatic変数を使う場合、
リエントラントが崩れることがある。
(Code Reading ~オープンソースから学ぶソフトウェア開発技法~ (プレミアムブックス版)を参考に執筆しました。)
並列処理などで動的なメモリ確保と解放が複雑になる時に、
参照カウント方式のガーベッジコレクションを使うことがある。
その変数の参照が増えるごとに参照カウントをインクリメントし、
参照が減るごとにデクリメントする。
全ての参照が無くなってゼロになった時に、
その変数は不要になるため、
メモリ領域を解放する。
参照カウント方式の他にも、
マーク・スイープやコピーGCなどの方式がある。
以下は参考文献。
テンプレートにおいて、
typenameとclassはほとんど同じ意味。
普段使う上ではどちらを使っても構わない。
typenameはintなどの基本型、
classはクラスなどの目的に使うことを期待している。
詳しくは、Effective C++ 第3版が参考になります。
ハッシュテーブルは、
ハッシュ関数とハッシュ値によってキーと値の表で表されるデータ構造。
値が固定長になるため、検索効率が高く、
どんなに値が増えても効率が変わらない。
内部の仕組みとしては、
連結リストへのポインタを格納した配列を用いる。
すなわち、配列の要素がそれぞれの連結リストへのポインタとなる。
探索アルゴリズムにおいて、
ハッシュテーブルはイコール検索に強いが、範囲検索は苦手。
これに対して、
B-Treeはイコール検索も範囲検索もバランスよくこなす万能型。
(絵で見てわかるITインフラの仕組み (DB SELECTION)を参考に執筆しました。)