11

主にJavaでの配列割り当てに関する一般的な質問ですが、すべてのプログラミング言語に関連すると思います。

[O(n)に関して]サイズnの配列にメモリを割り当てるのにどれくらいの時間がかかりますか? メモリ割り当てが一定時間で行われる実装を想像できます。空のメモリが大量にある場合は、新しい配列の最初と最後のインデックスへのポインタを作成できますが、メモリは一般的にどのように割り当てられますか? (また、少なくとも Java では、整数の配列を初期化すると、配列内のすべての値が最初に 0 に設定されます。これは、配列内の各インデックスが個別に 0 に設定されることを意味しますか?操作をO(n)?)

ありがとう。

4

3 に答える 3

3

あなたはすでに自分で質問に答えています。O(n)要素が初期化されているのでJavaにありますがO(1)、初期化がないためこの操作がある言語があります。

そして念のため

public class ArrayTest {

  public static void main(String[] args) {
     int[] var = new int[5];
  }

}

生産する

public class ArrayTest extends java.lang.Object{
public ArrayTest();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_5
   1:   newarray int
   3:   astore_1
   4:   return

}

ドキュメントはnewarrayについて述べています:

コンポーネントの型が atype で長さが count の新しい配列が、ガベージ コレクション ヒープから割り当てられます。この新しい配列オブジェクトへの参照配列参照は、オペランド スタックにプッシュされます。新しい配列の各要素は、配列の型のデフォルトの初期値 に初期化されます (§2.5.1)。

于 2013-08-11T19:40:39.560 に答える