K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
> > 配列の実装は、結果的にまったく違うものになっています。配列領域を固定で >スタックに持つことでGCを無くす。この目的のために結果的に多くの修正をしま >した。下記のようなプログラムとディスアセンブルコードを見てください。 > この並列はずいぶん悩みましたが、結果的に一番良いであろう方法に落ち着き >ました。 > >---------------------------------- >int main() >{ > int[2][3] i5dim; > int id = 33; > boolean[2] bdim1 = { true , false }; > int[2][3] idim21 = {{1,2,3},{4,300,65536}}; > int[2][3][4] idim3 = {{{1,2,3,4},{5,6,7,300},{8,9,10,11}}, > {{11,12,13,65536},{14,15,16,17},{18,19,20,21}}}; > double[4] ddim1 = { 0.0, 1.0, 4.1, 5.1 }; > string[5] sdim1 = {"aa","bb","cc","dd","ee"}; > > int a1; > i5dim[1][2] = 1; > a1 = i5dim[i5dim[1][2]][0]; >} >---------------------------------- > ↓ > 下記のように、配列の定数は配列定数バッファーに詰め込んで保持し、1命令で >配列変数に書き込みです。もちろん配列数と一致したデータ以外はエラーです。 >また、変数の配列次元数が一致しない場合もエラーになる処理が入っています。 >int[10] P; P = P; の様なポインター的なコードが書けない仕様です。 > ↓ >バイトコード > ↓ >1:*** 一般関数情報ダンプ ****************** >1:int main() >1:*** ローカル変数の表示 no = 8 *** >1: 0:int [2][3] i5dim >1: 1:int id >1: 2:boolean [2] bdim1 >1: 3:int [2][3] idim21 >1: 4:int [2][3][4] idim3 >1: 5:double [4] ddim1 >1: 6:string [5] sdim1 >1: 7:int a1 >1:*** 配列定数 数 = 5 ********** >1: 0:int 配列 [2] size=20 >1:int[0] = 1 >1:int[1] = 0 >1: 1:int 配列 [2][3] size=36 >1:int[0][0] = 1 >1:int[0][1] = 2 >1:int[0][2] = 3 >1:int[1][0] = 4 >1:int[1][1] = 300 >1:int[1][2] = 65536 >1: 2:int 配列 [2][3][4] size=108 >1:int[0][0][0] = 1 >1:int[0][0][1] = 2 >1:int[0][0][2] = 3 >1:int[0][0][3] = 4 >1:int[0][1][0] = 5 >1:int[0][1][1] = 6 >1:int[0][1][2] = 7 >1:int[0][1][3] = 300 >1:int[0][2][0] = 8 >1:int[0][2][1] = 9 >1:int[0][2][2] = 10 >1:int[0][2][3] = 11 >1:int[1][0][0] = 11 >1:int[1][0][1] = 12 >1:int[1][0][2] = 13 >1:int[1][0][3] = 65536 >1:int[1][1][0] = 14 >1:int[1][1][1] = 15 >1:int[1][1][2] = 16 >1:int[1][1][3] = 17 >1:int[1][2][0] = 18 >1:int[1][2][1] = 19 >1:int[1][2][2] = 20 >1:int[1][2][3] = 21 >1: 3:double 配列 [4] size=44 >1:double[0] = 0.000000 >1:double[1] = 1.000000 >1:double[2] = 4.100000 >1:double[3] = 5.100000 >1: 4:string_no 配列 [5] size=32 >1:string[0] = 9 >1:string[1] = 10 >1:string[2] = 11 >1:string[3] = 12 >1:string[4] = 13 >1:*** 文字列 数 = 14 *** >1: 0: "main" >1: 1: "i5dim" >1: 2: "id" >1: 3: "bdim1" >1: 4: "idim21" >1: 5: "idim3" >1: 6: "ddim1" >1: 7: "sdim1" >1: 8: "a1" >1: 9: "aa" >1: 10: "bb" >1: 11: "cc" >1: 12: "dd" >1: 13: "ee" >1:*** 使用予定のスタックサイズ = 426 >1:*** 関数コードのディスアセンブラ size = 63 >1: 0 push_int_1byte 33 >1: 2 pop_stack_int 1 >1: 5 set_array_literal_int 0 2 >1: 10 set_array_literal_int 1 3 >1: 15 set_array_literal_int 2 4 >1: 20 set_array_literal_double 3 5 >1: 25 set_array_literal_string 4 6 >1: 30 push_int_1byte 1 >1: 32 push_stack_array 0 >1: 35 push_int_1byte 1 >1: 37 push_array_int >1: 38 push_int_1byte 2 >1: 40 pop_array_int >1: 41 push_stack_array 0 >1: 44 push_stack_array 0 >1: 47 push_int_1byte 1 >1: 49 push_array_int >1: 50 push_int_1byte 2 >1: 52 push_array_int >1: 53 push_array_int >1: 54 push_int_1byte 0 >1: 56 push_array_int >1: 57 pop_stack_int 7 >1: 60 push_int_1byte 0 >1: 62 return >1:*** 行情報 数 = 10 *** >1: 4: from 0 size 5 >1: 5: from 5 size 5 >1: 6: from 10 size 5 >1: 8: from 15 size 5 >1: 9: from 20 size 5 >1: 10: from 25 size 5 >1: 13: from 30 size 11 >1: 14: from 41 size 19 >1: 19: from 60 size 2 >1: 15: from 62 size 1 >1:*** end of main() -------------- > >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!