功能
仅仅占用主机一部分内存,其他什么也不做。
源文件:memoccupy.c
malloc方式
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define UNIT (1024*1024)
int main(int argc, char *argv[])
{
long long i = 0;
long size = 0;
if (argc != 2) {
printf(" === argc must 2\n");
return 1;
}
size = strtoull(argv[1], NULL, 10);
if (size == 0) {
printf(" argv[1]=%s not good\n", argv[1]);
return 1;
}
char *buff = (char *) malloc(size * UNIT);
if (buff)
printf(" we malloced %d Mb\n", size);
buff[0] = 1;
for (i = 1; i < (size * UNIT); i++) {
if (i%1024 == 0)
buff[i] = buff[i-1]/8;
else
buff[i] = i/2;
}
pause();
}
calloc方式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MB (1024 * 1024)
int main(int argc, char const *argv[]) {
if (argc < 2) {
printf("请提供需要使用内存大小(GB)\n");
return 1;
}
long size = strtol(argv[1], NULL, 10);
if (size <= 0) {
printf("请输入大于 0 的内存大小(GB)\n");
return 1;
}
size = size * MB / sizeof(char); // 单位换算,转换为 char 数组大小
char *big_mem = (char *) calloc(size, sizeof(char)); // 分配内存
if (big_mem == NULL) {
printf("无法分配 %ld MB 的内存空间\n", size * sizeof(char) / MB);
return 1;
}
printf("已成功分配 %ld GB 内存空间\n", size * sizeof(char) / MB);// 写入数据将内存占用
long i;
for (i = 0; i < size; ++i) {
big_mem[i] = 'M';
}
printf("已成功写入 %ld GB 数据到内存空间\n", size * sizeof(char) / MB);
// 保持程序运行
pause();
return 0;
}
实际测试,calloc要比malloc快很多。
编译
gcc memoccupy.c -o memoccupy
运行
前台运行
$./memoccupy {占用内存数,单位M}
ctrl+c 退出程序并释放占用内存
后台运行
$nohup ./memoccupy {占用内存数,单位M} &
退出后台进程并释放占用的内存
$pkill memoccupy