Я пытаюсь решить следующую проблему:
«Напишите программу на C, которая умножает матрицу n x n на вектор из n элементов. Выберите n настолько большим, насколько позволяет ваша память».
Умножение матриц очень легко реализовать, и вы можете найти достаточно информации в Интернете, но я понятия не имею, как вычислить максимальный выделяемый размер моей памяти.
Первое, что пришло мне в голову, это сделать динамическое выделение памяти с помощью функций malloc() и realloc() и посмотреть, насколько это возможно.
int main() {
int n = 0;
float** first = (float**) malloc(sizeof(float*));
while(1) {
next** = (float**) realloc(first, n * sizeof(float*));
n++;
if (next == NULL) {
break;
}
}
}
Проблема в том, что Windows 10 использует виртуальную оперативную память и прочее, поэтому этот метод приводит к бесконечному циклу.
Любые идеи ?
malloc()
/realloc()
преуспеют, но когда вы попытаетесь фактически использовать память, убийца OOM начнет убивать процессы в системе. - person Andrew Henle   schedule 08.11.2019n = sqrt(2 * 1024 * 1024) / sizeof(float))
- в качестве оценки значения, которое может использовать большую часть доступной физической памяти. - person Clifford   schedule 08.11.2019