私の質問は、どのプログラミング言語でも動的メモリ割り当ては静的メモリ割り当てよりも速いですか?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
私の質問は、どのプログラミング言語でも動的メモリ割り当ては静的メモリ割り当てよりも速いですか?
int main(int, char**)
{
int *pa = new int; // faster than
int a; // ?
return 0;
}
動的メモリ割り当ては静的メモリ割り当てよりも高速です
比較しているのは、スタックへの割り当て(自動)とヒープへの割り当て(動的)です。ここでは静的割り当ては関係ありません。
関数が入力されると、自動変数用のスペースが割り当てられます。必要なスペースのサイズをスタック ポインターから差し引くだけです。
一般に、ヒープの割り当ては、スタックでの割り当てよりも遅くなります。これには、OS からメモリのチャンクを切り出し、それらのチャンクを小さな断片に分割して、ユーザーの割り当て要求に対応することが含まれます。ヒープ マネージャーはかなり複雑なライブラリになる場合があります。メモリ管理を参照してください。
これは静的割り当てではなく、自動割り当てです (変数はローカル変数です)。静的割り当ては、static
ローカルおよびグローバル (ファイル スコープ) 変数用です。
それにもかかわらず、動的割り当ては決して高速ではありません。C および C++ では、これはシステム コールであり、低速です。
それほど遅くはありませんでしたが、自動および静的割り当ては瞬時です。静的割り当てはプログラムの開始時に発生し、OS によってプロセス用に予約されるスペースが増えるだけです。自動割り当ては、関数が呼び出されたときにスタックポインターが数バイト先に進むだけです。どちらの場合でも、変数を割り当てていない場合よりも (CPU に関して) 何も行われません。