Помимо Cruft (крайне ненужный код) у вас есть некоторые проблемы с переменными и циклами: Ваш цикл for (int i = 0; i < TEST_LENGTH; i++)...
, который реализует шаг 2 спецификации, является циклом, в котором каждые 100 шагов вы должны печатать текущую статистику. , Наличие внешней петли for (int j = 0; j < 1000; j++)
и тестирование остатков j%100
- нонсенс.
Для отладки такой проблемы выбейте два или три нуля для каждого из больших чисел BLOCK_COUNT, TEST_LENGTH, SIZE_LIMIT, измените предел цикла j
на 10 и добавьте printf("j=..." ...)
после for (int j ...) {
, чтобы вы могли расскажи что происходит С такими изменениями вы увидите:
j=0 0 0
0 556736 507760
j=1 0 0
j=2 0 0
j=3 0 0
...
и затем может сделать вывод, что ваша программа, казалось, зависла, потому что она медленно считала от j до 100, чтобы добраться до j%100 == 0
.
Теперь я упомяну два мелких предмета, которые нужно удалить, и после этого упомяну о серьезной проблеме с вашей программой.
Вместо
int minimum = 0;
int maximum = 0;
...
if (i == 0) {
maximum = heapsize;
minimum = heapsize;
}
else {
if (heapsize > maximum) {
maximum = heapsize;
}
if (heapsize < minimum) {
minimum = heapsize;
}
запись
int minimum = MAX_INT;
int maximum = 0;
...
if (heapsize > maximum)
maximum = heapsize;
if (heapsize < minimum)
minimum = heapsize;
(или, возможно, вариант MAX_INT) и (если вам нужно j
и / или remainder
, что вам не нужно) вместо
if (j > 0) {
remainder = j % 100;
}
if (remainder == 0 ) {
...
вы бы написали
if (j>0 && j%100 == 0 ) {
...
Основная проблема с вашей программой: когда вы говорите free(ptrList[index]);
в части 2, вы можете освободить элемент, который учитывает текущий минимальный или максимальный адреса памяти. Одним из способов решения этой проблемы является поддержание приоритетных очередей со значениями min / max и дисциплиной fifo; я думаю, что вам будет проще не отслеживать мин / макс при распределении, а просто создать цикл для нахождения мин / макс прямо перед каждой распечаткой.
Незначительная проблема с вашей программой: максимальный используемый адрес не ptrList[index]
для некоторого индекса, но ptrList[index]+sizeList[index]
.