Last Update 2024/12/13
malloc()実行時とメモリ書き込み時のメモリ使用状況の確認
sample.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
printf("********** malloc() 実行前のメモリ使用状況 **********\n");
system("ps -o vsz,rss,comm -C a.out");
/* malloc実行 - 確保メモリ 1024KB */
char *p = (char *)malloc(1024 * 1024);
printf("********** malloc() 実行後のメモリ使用状況(1024KB確保) **********\n");
system("ps -o vsz,rss,comm -C a.out");
/* 確保メモリに書き込み(1024KB) */
memset(p, 0x30, (1024*1024-1));
printf("********** 書き込み(1024KB)実行後のメモリ使用状況 **********\n");
system("ps -o vsz,rss,comm -C a.out");
/* メモリを解放 */
free(p);
printf("********** 解放後のメモリ使用状況 **********\n");
system("ps -o vsz,rss,comm -C a.out");
return EXIT_SUCCESS;
}
実行結果
$ gcc -Wall sample.c
$ ./a.out
********** malloc() 実行前のメモリ使用状況 **********
VSZ RSS COMMAND
2436 1408 a.out
********** malloc() 実行後のメモリ使用状況(1024KB確保) **********
VSZ RSS COMMAND
3464 1408 a.out <--- VSZ(仮想メモリサイズ)が増加
********** 書き込み(1024KB)実行後のメモリ使用状況 **********
VSZ RSS COMMAND
3464 2432 a.out <--- RSS(実メモリサイズ)が増加
********** 解放後のメモリ使用状況 **********
VSZ RSS COMMAND
2436 1504 a.out <--- VSZ、RSS共に減少
実行環境
GNU bash, version 5.1.16
GCC-12.2.0
GNU C Library 2.36
GNU Binutils 2.39
GCC-12.2.0
GNU C Library 2.36
GNU Binutils 2.39
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。