2010-11-26 3 views
2

Ada(配列の配列)に大きな配列を動的に割り当てようとしています。例えば 、私は動的にそうようにオブジェクトを割り当てることができるよ:Adaでのレコードの動的配列割り当て

type Object; 
type ObjPtr is access Object; 
OP : ObjPtr; 
-- sometime later 
OP := new Object; 
OP.Index := I;--OP.Ptr.all; 
Free(OP); 

私はこのベンチマークのコードをエミュレートしようとしています:悲しいこと

Object **objList = new Object*[500000]; 
int32_t *iList = new int32_t[500000]; 
for (int32_t i = 0; i < 500000; ++i) 
{ 
    objList[i] = new Object; 
    iList[i] = Object::getIndex(objList[i]); 
    delete objList[i]; 
} 
delete[] iList; 
delete[] objList; 

を、私も何かをすることができませんよこのようなC++相当するものは:

Object *objList = new Object*[500000]; 

私はずっとこれまでのところ、この思い付いた:

type objs is array (Positive range <>) of Object; 
type objList is access objs; 

しかし、私はおそらくオフです。

あなたのC++のコードは次のようにほぼ変換するでしょうエイダで
+0

配列の配列はどこですか? – Schedler

+0

「ベンチマーク」とは何ですか? Schedlerはこれを行う方法を示していますが、Adaで実際にこのようなことを行う必要はほとんどありません(そして、C++でも避けてください)。また、おそらくAdaの 'new'はC++の' new'とまったく同じOSルーチンへの呼び出しとして実装されています。したがって、動的割り当てパフォーマンスをベンチマークすることは、無意味でも愚かでもありません。 –

答えて

1

Alloc_Count : constant := 500_000; 
type ObjPtr is access Object; 
type ObjArray is array (1 .. Alloc_Count) of ObjPtr; 
OA : ObjArray; 
begin 
    for I in OA'Range loop 
    OA(I) := new Object; 
    -- ... do the other things 
end loop; 

あなたがオブジェクトを派遣する事業を利用したい場合(つまりObjectタグ付けタイプとして定義されている)、代わりにObject'classを使用ObjPtr宣言ではObjectです。

関連する問題