2013-05-10 4 views
2

Мне нужно смоделировать инкрементный алгоритм сбора мусора в C++ или Java. На этом я сомневался.Распределение памяти для моделирования инкрементного сбора мусора в C++

В качестве ввода (stdin с клавиатуры), мне будет предложено выделить некоторую память для этого кода. Синтаксис будет:

x = alloc(128KB); 

Мой вопрос: нормально ли это использовать malloc для назначения? Или есть другой способ выделить память? У меня было это сомнение, потому что размер может доходить до ГБ для задания, поэтому использование malloc, возможно, не очень хорошая идея.

ответ

1

Прежде всего, если вы хотите запретить огромное выделение памяти, просто проверить значение входных пользователей, но я не знаю, сколько памяти вы думаете, как огромная память. Я думаю, вы об этом не беспокоитесь, потому что если распределение памяти не удалось, malloc и calloc вернут указатель NULL.

Во-вторых, вы также можете использовать «calloc» для этого случая.

void calloc(size_t num, size_t size); 

«Num» имеет значение счетчика для выделения и „означают“ Elements размера, конечно, размер элемента. Ниже коды имеют одинаковый результат.

ar = (int *)malloc(5 * sizeof(int)); 
ar = (int *)calloc(5, sizeof(int)); 

Однако, если вы выбираете «calloc», вы можете управлять более логически кода, так как вы можете разделить количество памяти на единицу и подсчет. Кроме того, если вы используете «calloc», вам не нужно использовать memset для установки значения памяти в ноль. 'calloc' автоматически устанавливает значение памяти в ноль.

Я надеюсь, что эта статья может вам помочь.

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; 
} 
+0

уверен. Попробуем. Спасибо. – Tuffy

+0

могут быть ограничения ядра, но я думаю, что ваше задание не пройдет мимо них :) –