質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

パフォーマンス

コード効率の向上や計算に関する質問には、このタグを使ってください。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

2268閲覧

同じ要素内容でも固定長配列の方が可変長配列よりメモリを使わない理由は何故ですか?

MonsterEnergy

総合スコア14

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

パフォーマンス

コード効率の向上や計算に関する質問には、このタグを使ってください。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2022/01/28 12:36

編集2022/01/28 12:38

一般に固定長配列の方が可変長配列よりメモリを使わないといわれている理由を教えて頂けないでしょうか。

直感的には結局同じ要素数を格納するのであれば、固定長でも可変長でも要素の格納に必要なメモリの大きさは同じの気がします。可変長の場合は格納されている要素の情報以外にも何か情報を持っているのでしょうか?

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

可変長配列というと「コンパイル時には長さが決まっていないが実行時に長さが確定される配列」という意味と、「長さを変更できる配列(要素の追加や削除が可能な配列)」という意味との二つの意味でつかわれてます。

前者の意味の可変長配列では長さに関する情報が追加で必要になる程度でほとんど関係ありません。
後者の意味の可変長配列では長さが変更された時のメモリの再確保が頻繁に行われないように余分にメモリを確保する場合があります(必要量の1.5倍や2倍など)。

投稿2022/01/29 02:21

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一度作った後で長さを変えられる配列で、固定長配列にない記憶というと代表的なのは「長さ」ですね。

あとは、長さを変えること自体が(ビフォーアフターが些細な違いでも)大きな負荷をかけます。
なので Java の ArrayList や C++ の vector は実際の長さよりも多めにメモリを確保します。
この 予約領域を含めた配列全体のメモリ使用量capacity と呼ばれ、それっぽいメソッドで問い合わせることができます。

投稿2022/02/03 11:18

編集2022/02/03 11:19
Pc_Felith

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

可変長の場合は格納されている要素の情報以外にも何か情報を持っているのでしょうか?

可変長であれば、どこからどこまでがデータなのかを示すために、
・データ長(ないしデータ長が算出できる情報)
・これでデータが終わりだという目印
の少なくともどちらかが必要です。

ただ、これらの情報はそう大きくないので、データ長のばらつきがある場合は、可変長にした方がトータルでは小さくて済むことが多いでしょう。
あなたに「一般に固定長配列の方が可変長配列よりメモリを使わない」と言った人に真意を確認した方が良いでしょうね。

投稿2022/01/28 13:27

otn

総合スコア84712

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

可変長配列というのがCの文法上の用語として出てくる可変長配列であるなら、まさに「固定長でも可変長でも要素の格納に必要なメモリの大きさは同じ」でしょう。

しかし、それでは質問が成立しませんから、そうではなくてメモリ領域をmalloc等で(一般にはヒープ上に)確保してそこに配列を割り当てて使用していることを「可変長配列と呼んでいる」のではないでしょうか? それはCの文法でいう可変長配列とは違うものを誤ってそう呼んでいるということなので、まずはそこの区別をしっかりして頂きたいと思います。

後者の場合、ヒープ領域からメモリを取得すると、システム上そのメモリ領域を使用中だとして扱うための管理領域が必要になり、その分のメモリが必要になります(これはC言語ライブラリ内の話)。そして、取得した領域を今度はC言語のプログラムから利用するための確保した領域へのポインタを保持する必要があり、ポインタを保持するための領域が必要になります。
このように、実際に要素を格納するための領域の他に、管理のための領域がいくらか必要になります。
多分そのことを言っているのではないか、と想像します。
(ただし、繰り返しになりますが、それは「可変長配列」とは違うものかと思います。

投稿2022/01/28 12:57

thkana

総合スコア7652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問