c+中增量垃圾收集模拟的内存分配+; 我需要在C++或java中模拟一个增量垃圾收集算法。基于此,我有一个疑问

c+中增量垃圾收集模拟的内存分配+; 我需要在C++或java中模拟一个增量垃圾收集算法。基于此,我有一个疑问,c++,garbage-collection,C++,Garbage Collection,作为输入(stdin来自键盘),我将被要求为此代码分配一些内存。语法是: x = alloc(128KB); 我的问题:在作业中使用malloc可以吗?或者还有其他分配内存的方法吗?我有这个疑问是因为,分配的大小可以达到GB,所以我认为使用malloc可能不是一个好主意。malloc可以分配您想要的内存,只要您不超过ulimit。进行以下测试: #include <stdlib.h> #include <string.h> #define ONEGB (size_t)

作为输入(
stdin
来自键盘),我将被要求为此代码分配一些内存。语法是:

x = alloc(128KB);

我的问题:在作业中使用
malloc
可以吗?或者还有其他分配内存的方法吗?我有这个疑问是因为,分配的大小可以达到GB,所以我认为使用
malloc
可能不是一个好主意。

malloc可以分配您想要的内存,只要您不超过ulimit。进行以下测试:

#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;
}
#包括
#包括
#定义ONEGB(大小)(1073741824)
int main(){
char*p;
p=malloc(ONEGB);
如果(!p){
佩罗尔(“马洛克”);
}
否则{
memset(p,0,ONEGB);
}
返回0;
}

首先,如果你想禁止大内存分配,只需检查用户的输入值,但我不确定你认为有多少内存是大内存。我想您不必担心,因为如果内存分配失败,malloc和calloc将返回一个空指针

其次,您也可以在这种情况下使用“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”自动将内存值设置为零


我希望这篇文章能对你有所帮助。

当然。我会试试看。谢谢。可能有内核限制,但我认为您的任务不会超过这些限制:)