ホームページ > バックエンド開発 > C++ > 動的メモリ割り当ては、C 言語のメカニズムです。これにより、プログラムは実行時にメモリ領域を動的に割り当てたり解放したりできます。動的メモリ割り当てを使用すると、プログラムはコンパイル時にメモリ サイズを決定することなく、必要に応じてメモリを動的に割り当てることができます。これにより、プログラムはメモリをより柔軟に管理し、利用可能なシステム リソースを効率的に使用できるようになります。

動的メモリ割り当ては、C 言語のメカニズムです。これにより、プログラムは実行時にメモリ領域を動的に割り当てたり解放したりできます。動的メモリ割り当てを使用すると、プログラムはコンパイル時にメモリ サイズを決定することなく、必要に応じてメモリを動的に割り当てることができます。これにより、プログラムはメモリをより柔軟に管理し、利用可能なシステム リソースを効率的に使用できるようになります。

WBOY
リリース: 2023-09-07 11:49:02
転載
1416 人が閲覧しました

动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源

ここでは、C 言語における動的メモリ割り当てとは何かを学びます。 C プログラミング言語には、メモリの割り当てと管理のためのいくつかの関数が用意されています。これらの関数は ヘッダー ファイルにあります。メモリ割り当てには次の関数が使用されます。

#関数説明##void *calloc(int num, int size ) ;numvoid free(void *address);void *malloc(int num);numvoid *realloc(void *address, int newsize);newsizeメモリの動的割り当て
この関数は、各要素のサイズをバイト単位で指定した 要素の配列を割り当てます。
この関数は、アドレスで指定されたメモリ ブロックを解放します。
この関数は、 バイトの配列を割り当て、初期化されないままにします。
この関数はメモリを再割り当てし、 に拡張します。

プログラミングの際、配列のサイズがわかっていれば、それを配列として定義するのは簡単です。たとえば、任意の人の名前を保存するには、最大 100 文字を含めることができるため、次のように定義できます -

char name[100];
ログイン後にコピー

しかし、ここで、名前の長さがわからない場合を考えてみましょう。保存する必要があるテキスト。たとえば、トピックに関する詳細な説明を保存したい場合。ここでは、必要なメモリ量を定義せずに文字へのポインタを定義する必要があります。その後、必要に応じて、次の例に示すようにメモリを割り当てることができます。 -

サンプル コード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcpy( description, "Adam a DPS student in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
}
ログイン後にコピー

出力

Name = Zara Ali
Description: Zara ali a DPS student in class 10th
ログイン後にコピー

calloc() を使用して同じプログラムを作成できます。唯一の問題は、以下に示すように、malloc を calloc に置き換える必要があることです。 -

calloc(200, sizeof(char));
ログイン後にコピー

したがって、メモリの割り当てを完全に制御できます。任意のサイズ値を渡す場合、配列とは異なり、配列のサイズは一度定義されると変更できません。

メモリ位置のサイズを調整する

オペレーティング システムは、プログラムがリリースされると、プログラムによって割り当てられたすべてのメモリを自動的に解放しますが、メモリが必要なくなった場合は、推奨事項として、 free() 関数を呼び出してメモリを解放する必要があります。

あるいは、関数 realloc() を呼び出して、割り当てられたメモリ ブロックのサイズを増減することもできます。上記のプログラムをもう一度確認して、realloc() 関数と free() 関数を使用してみましょう -

サンプル コード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcpy( description, "Adam a DPS student.");
   }
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory</p><p>");
   } else {
      strcat( description, "He is in class 10th");
   }
   printf("Name = %s</p><p>", name );
   printf("Description: %s</p><p>", description );
   /* release memory using free() function */
   free(description);
}
ログイン後にコピー

出力

Name = Adam
Description: Adam a DPS student.He is in class 10th
ログイン後にコピー

追加の Reallocate なしで上記の例を試すことができます。説明に使用可能なメモリが不足しているため、strcat() 関数ではエラーが発生します。

以上が動的メモリ割り当ては、C 言語のメカニズムです。これにより、プログラムは実行時にメモリ領域を動的に割り当てたり解放したりできます。動的メモリ割り当てを使用すると、プログラムはコンパイル時にメモリ サイズを決定することなく、必要に応じてメモリを動的に割り当てることができます。これにより、プログラムはメモリをより柔軟に管理し、利用可能なシステム リソースを効率的に使用できるようになります。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート