c ++中增量垃圾收集模拟的内存分配

时间:2013-05-10 02:50:47

标签: c++ garbage-collection

我需要用C ++或Java模拟增量垃圾收集算法。基于此,我有一个疑问。

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

x = alloc(128KB);

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

2 个答案:

答案 0 :(得分:1)

malloc可以根据您的意愿分配尽可能多的内存,前提是您没有超过ulimits。给出以下内容进行测试:

#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;
}

答案 1 :(得分:1)

首先,如果你想禁止大量内存分配,只需检查用户的输入值,但我不确定你认为有多少内存是一个巨大的内存。我想你不用担心,因为如果内存分配失败,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'自动将内存值设置为零。

我希望这篇文章可以帮助你。