我需要在 C++ 或 Java 中模拟增量垃圾收集算法。基于此,我产生了疑问。
作为输入(stdin
来自键盘),我将被要求为此代码分配一些内存。语法是:
x = alloc(128KB);
我的问题:可以malloc
用于作业吗?或者有没有其他方法来分配内存?我有这个疑问,因为分配的大小可以达到 GB,所以malloc
我认为使用可能不是一个好主意。
我需要在 C++ 或 Java 中模拟增量垃圾收集算法。基于此,我产生了疑问。
作为输入(stdin
来自键盘),我将被要求为此代码分配一些内存。语法是:
x = alloc(128KB);
我的问题:可以malloc
用于作业吗?或者有没有其他方法来分配内存?我有这个疑问,因为分配的大小可以达到 GB,所以malloc
我认为使用可能不是一个好主意。
只要您不超过 ulimits,malloc 就可以根据需要分配尽可能多的内存。试一试以下内容:
#include <stdlib.h>
#include <string.h>
#define ONEGB (size_t)(1073741824)
int main() {
char *p;
p = malloc(ONEGB);
if (!p) {
perror("malloc");
}
else {
memset(p, 0, ONEGB);
}
return 0;
}
首先,如果你想禁止巨大的内存分配,只需检查用户的输入值,但我不确定你认为多少内存是巨大的内存。我想你不用担心,因为如果内存分配失败,malloc 和 calloc 将返回一个 NULL 指针。
其次,您也可以在这种情况下使用“calloc”。
void calloc(size_t num, size_t size);
“num”是分配的平均元素计数,“size”当然是元素的大小。下面的代码具有相同的结果。
ar = (int *)malloc(5 * sizeof(int));
ar = (int *)calloc(5, sizeof(int));
但是,如果您选择“calloc”,您可以更合理地管理您的代码,因为您可以按单元和计数来划分内存数量。此外,如果您使用 'calloc',则无需使用 memset 将内存值设置为零。'calloc' 将内存值自动设置为零。
我希望这篇文章可以帮助你。