malloc() でメモリを確保する場合、2^n 単位で確保するとよい。
無駄になるメモリはたかだか50%だし、変な断片化も最小化される。
とのことだ。断片化については数学的な議論をして確認したいところだ。
また、realloc() についても、以前に割り当てられていたサイズの2倍のサイズを要求すると、log(n) 回より多く realloc() を呼ぶこともないし、巨大な文字列に大しても適度なパフォーマンスが得られるし、無駄になるメモリもたかだか50%で済む。
とのことだ。これも数学的に確認したいところだ。
以上は、『Joel on Software』の第2章で触れられていたことだ。
Sunday, March 26, 2006
Tuesday, March 14, 2006
java.sql.Array を使う方法
これはインターフェースなので、java.sql.Connection 同様、JDBC ドライバのベンダから実装を提供してもらわねばならない。
Oracle では、oracle.sql.ARRAY がこのインターフェースの実装になっている。次のようなコードを使う。
oracle.sql.ArrayDescriptor arrayDesc = oracle.sql.ArrayDescriptor.createDescriptor("HOGE_ARRAY", con);
java.sql.Array array = new oracle.sql.ARRAY(arrayDesc, con, new int[] {1,3,5,0});
con は java.sql.Connection である。これは、Oracle のドライバから取得した Connection でなくてはならない。DataSource 等から取得したラッパだと ClassCastException が発生することがある。
HOGE_ARRAY は、Oracle の CREATE TYPE 文でつくった型だ。何故か大文字で指定しなくてはならなかった。
ここでは、整数配列から java.sql.Array をつくっているが、当然、HOGE_ARRAY 型は整数を格納できる配列型として Oracle 側で定義していなくてはならない。
Oracle では、oracle.sql.ARRAY がこのインターフェースの実装になっている。次のようなコードを使う。
oracle.sql.ArrayDescriptor arrayDesc = oracle.sql.ArrayDescriptor.createDescriptor("HOGE_ARRAY", con);
java.sql.Array array = new oracle.sql.ARRAY(arrayDesc, con, new int[] {1,3,5,0});
con は java.sql.Connection である。これは、Oracle のドライバから取得した Connection でなくてはならない。DataSource 等から取得したラッパだと ClassCastException が発生することがある。
HOGE_ARRAY は、Oracle の CREATE TYPE 文でつくった型だ。何故か大文字で指定しなくてはならなかった。
ここでは、整数配列から java.sql.Array をつくっているが、当然、HOGE_ARRAY 型は整数を格納できる配列型として Oracle 側で定義していなくてはならない。
Subscribe to:
Posts (Atom)