35.1メモリの使用
34章では,ポインタを用いて変数のメモリアドレスをポインタに格納する.次に、必要に応じてポインタにメモリ領域を割り当てる方法を見てみましょう.
メモリはmalloc→使用→freeモードで 使用
メモリを使用するには、 malloc : memory alloccate に必要なメモリサイズはバイト単位で指定します. メモリ割り当て、解放関数はstdlibです.hファイルで宣言します. ポインタ=malloc(サイズ); void *malloc(size_t_Size); メモリアドレスが正常に返され、NULL が失敗しました.
ポインタにメモリを割り当てる場合は、malloc関数を使用してポインタに割り当てられたメモリ領域サイズを入れます.上記のコードは は、
上記のコードではnumptr 1は通常変数にメモリアドレスを割り当て,numptr 2はmalloc関数にメモリを割り当てた.
同じメモリアドレスでも内部に差があります.
変数はスタックで生成されます. スタックで生成された変数は、使用後に処理されなくてもよい. malloc関数はお尻のメモリを使用します. 関数を使用してhipに割り当てられたメモリは解放される必要があります.
スタックとhipの最大の違いは、メモリの解放です. free(ポインタ); void free(void *_Block); メモリを解放せずにメモリのみを割り当てると、最終的にはシステムメモリが不足し、オペレーティングシステムがプログラムを強制的に終了したり、メモリ割り当てに失敗したりします. したがって、メモリの解放は選択ではなく必須です. 特に、メモリを解放しないためメモリ使用量が増加する現象を スタック、hipの位置、および成長方向は、オペレーティングシステムおよびプラットフォームによって異なる場合があります.
割り当てられたメモリに値を保存してみます. malloc関数で指定したメモリに値を格納する場合は、ポインタを逆方向に参照して値を保存するだけです. と同様にprintf関数を使用して値を出力する場合は、逆参照ポインタで値を取得することもできます. メモリの割り当てと使用後は、
https://dojang.io/mod/page/view.php?id=284
https://dojang.io/mod/page/view.php?id=285
https://dojang.io/mod/page/view.php?id=286
メモリ使用モード
メモリの割り当て
メモリを使用するには、
malloc 함수
のメモリ容量が使用されていることを確認する必要があります.メモリ割当て
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int num1 = 20; // int형 변수 선언
int *numPtr1; // int형 포인터 선언
numPtr1 = &num1; // num1의 메모리 주소를 구하여 numPtr에 할당
int *numPtr2; // int형 포인터 선언
numPtr2 = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당
printf("%p\n", numPtr1); // 006BFA60: 변수 num1의 메모리 주소 출력
// 컴퓨터마다, 실행할 때마다 달라짐
printf("%p\n", numPtr2); // 009659F0: 새로 할당된 메모리의 주소 출력
// 컴퓨터마다, 실행할 때마다 달라짐
free(numPtr2); // 동적으로 할당한 메모리 해제
return 0;
}
sizeof
演算子を使用してintサイズ(4バイト)の空きメモリのみを割り当てます.ダイナミックメモリ割り当て
동적 메모리 할당(dynamic memeory allocation)
と呼ばれるメモリを任意に割り当てることができる. numPtr2 = malloc(sizeof(int));
// int의 크기 4바이트만큼 동적 메모리 할당
呑桟と尻
上記のコードではnumptr 1は通常変数にメモリアドレスを割り当て,numptr 2はmalloc関数にメモリを割り当てた.
同じメモリアドレスでも内部に差があります.
1.スタック(スタック)
2.お尻(heap)
❗メモリが無効
スタックとhipの最大の違いは、メモリの解放です.
메모리 누수(memory leak)
と呼ぶ.メモリに値を保存
割り当てられたメモリに値を保存してみます.
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int *numPtr; // int형 포인터 선언
numPtr = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당
*numPtr = 10; // 포인터를 역참조한 뒤 값 할당
printf("%d\n", *numPtr); // 10: 포인터를 역참조하여 메모리에 저장된 값 출력
free(numPtr); // 동적 메모리 해제
return 0;
}
free 함수
に解除する必要があります.注意)malloc関数にsizeof(int)*1024*1024*1024を入れたらどうなりますか?
numPtr2 = malloc(sizeof(int) * 1024 * 1024 * 1024);
計算すると、GiBは4 GiBで、よく配分されています.より大きなメモリを割り当てることができますが、実際のメモリ値はシステムの制限(RAM、ディスク)を超えてはいけません.ソース
https://dojang.io/mod/page/view.php?id=284
https://dojang.io/mod/page/view.php?id=285
https://dojang.io/mod/page/view.php?id=286
Reference
この問題について(35.1メモリの使用), 我々は、より多くの情報をここで見つけました https://velog.io/@shuajjjjj/35.1-메모리-사용하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol